2010-05-17 86 views
0

这可能是一个非常微不足道的问题,我试图解决,但我确信有更好的方法来做到这一点。所以请对我轻松点。快速检测Xml命名空间

我有一堆XSD文件在我们的应用程序内部,我们有大约20-30个Xml文件来实现基于这些XSD的数据集。一些Xml文件很小(< 100Kb),其他的大约是3-4Mb,少数超过10Mb。

我需要找出一种方法来确定这些Xml文件的命名空间是为了提供(类似于)基于XSD的intellisense。这不是一个问题 - 另一个开发者为此写了代码。

但我不确定检测命名空间的最好(也是最快!)方法是不使用XmlDocument(它会完全解析)。

我使用的是C#3.5,并且文档通过流(有些是远程文件)。所有文件都是* .xml(我可以检测它是否是基于扩展名的),但不幸的是,Xml命名空间是唯一的方法。

现在我已经试过了XmlDocument,但是我发现它是无效的,并且随着更大的文档正在等待被解析(甚至100Kb文档)而变慢。

public string GetNamespaceForDocument(Stream document); 

类似上面的是我的方法签名 - 重载包括“内容”的字符串。 RegEx(编译)模式会好吗?

Visual Studio如何如此高效地管理它?另一所大学告诉我要在C/C++中找到一个快速的Xml解析器,解析这些内容并且有一个存根,以.NET中较慢的方式返回命名空间,这是个好主意吗?

回答

2

您可以使用XmlReader,它使用“pull”方法来读取XML(类似于SAX的“push”方法,但更容易编码)。重要的是,它不等到在将东西还给你之前阅读整个文件。

+0

aha!这听起来很有趣,你如何使用XmlTextReader检测命名空间,它会关心多个命名空间吗? – 2010-05-17 07:06:32

+0

您应该可以使用GetNamespacesInScope方法完成此操作。 – Garett 2010-05-17 08:37:11