2010-05-17 87 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