2010-08-20 62 views
1

我必須分析我當前項目中的很多XML文件。
我將XML文件作爲string對象獲取。
我寫了一個方法來檢查XML字符串是否包含任何數據。有沒有更快的方法來檢查XML文件的文檔元素下的子元素的存在

private bool ContainsXmlData(string xmlString) 

{ 如果(string.IsNullOrEmpty(的xmlString)) 返回false; XmlDocument Doc = new XmlDocument(); 嘗試 { Doc.LoadXml(xmlString); } catch(XmlException) { return false; } if(!Doc.DocumentElement.HasChildNodes) return false; 返回true; }

有沒有辦法更快地執行此檢查?是否可以在不使用XmlDocument的情況下進行檢查?

編輯

我已經做了新的方法與XPathDocumentXPathNavigator。感謝米奇小麥和Kragen :)

private bool ContainsXmlData(string xmlString) 

{ 如果(string.IsNullOrEmpty(的xmlString)) 返回false; 嘗試 StringReader Reader = new StringReader(xmlString); XPathDocument doc = new XPathDocument(Reader); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator iter = nav.Select(「/」); return(iter.Count> 0)?真假; } catch(XmlException) { return false; } }

+0

貴'xmlString'始終具有相同的根節點?例如''?或者根可以不同? – 2010-08-20 11:06:04

+0

@DHoerster它可以不同 – peter 2010-08-20 11:14:24

回答

3

XPathDocument使用XPath提供了對XML文檔內容的快速只讀訪問。

或使用XmlTextReader最快),其提供對XML數據的快速,只進,非緩存訪問。

+0

不幸的是XPath是沒有選擇的,因爲目前還不知道文檔元素和子元素的名稱。 我會檢查出XmlTextReader。感謝您提供更多信息的鏈接:) – peter 2010-08-20 11:10:21

+2

@peter您不需要知道子元素的名稱 - 您可以使用通配符。我相信'*/*'應該做的伎倆(未經測試) – Justin 2010-08-20 11:11:55

+0

@kragen感謝您的提示。沒有想到這一點。將盡快發佈我的解決方案 – peter 2010-08-20 11:51:45

相關問題