2013-12-23 110 views
5

的一部分,考慮下面的XML:解析XML只

<?xml version="1.0" encoding="utf-8" ?> 
<Outer> 
    <Inner1>ABC</Inner1> 
    <Inner2>DEF</Inner2> 
</Outer> 

我希望能夠不必解析整個文檔得到Inner1的價值(‘ABC’)。這是因爲實際上文件可能會很長。有沒有辦法做到這一點使用.net(XDocument。而不是手動解析它)?

回答

7

您可以使用XmlReader,它不分析整個文檔,而是通過提供一個文件只轉發訪問(類似於SAX解析器):

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx


類似於下面的東西,我認爲:

using (XmlReader reader = XmlReader.Create("sample.xml")) { 

    // Move the reader to the inner1 node 
    reader.MoveToContent(); 
    reader.ReadToDescendant("Inner1"); 

    return reader.ReadElementContentAsString(); 
} 
+0

看起來很有希望。我現在正在研究它。 – ispiro

+0

這就是我正在尋找的,所以我接受了答案。謝謝。 (雖然你的例子中有''作爲'Value',當我測試它時,可能是我測試它當然是錯誤的。) – ispiro

+1

它在我使用'reader.ReadElementContentAsString();'時起作用。 (Good ol'intellisense :))再次感謝。 – ispiro

1

您需要解析所有數據以找到並提取它。但是,如果您使用XmlReader執行此操作,只要找到所需內容,就可以中止解析。相反,使用XmlDocument時,必須先加載整個文檔,然後才能開始在其中搜索。