2013-06-29 145 views
3

晚上好,週末愉快!如何使用XMLDocument類從C#中的XML文件獲取數據?

我一整天都在努力理解如何解析我的簡單XML文件,以便我能夠理解它,足以編寫我想要編寫的個人項目。

我一直在閱讀本網站和其他物品,但不能讓過去我在哪裏:(

我的XML文檔...

<XML> 
    <User> 
    <ID>123456789</ID> 
    <Device>My PC</Device> 
    </User> 
    <History> 
    <CreationTime>27 June 2013</CreationTime> 
    <UpdatedTime>29 June 2013</UpdatedTime> 
    <LastUsage>30 June 2013</LastUsage> 
    <UsageCount>103</UsageCount> 
    </History> 
    <Configuration> 
    <Name>Test Item</Name> 
    <Details>READ ME</Details> 
    <Enabled>true</Enabled> 
    </Configuration> 
</XML> 

我想獲得的價值。細節元素(READ ME)下面是我的代碼

// Start Logging Progress 
Console.WriteLine("Test Application - XML Parsing and Creating"); 
Console.ReadKey(); 

// Load XML Document 
XmlDocument MyDoc = new XmlDocument(); MyDoc.Load(@"E:\MyXML.XML"); 

// Select Node 
XmlNode MyNode = MyDoc.SelectSingleNode("XML/Configuration/Details"); 

// Output Node Value 
Console.WriteLine(String.Concat("Details: ", MyNode.Value)); 

// Pause 
Console.ReadKey(); 

我的控制檯應用程序正在運行,並且outputing「目標:」但不是給我的元素中的細節

有人可以明白爲什麼會發生這種情況,也許給我建議,如果我完全沒有辦法?我在閱讀XML文件方面沒有先前的知識;因此我現在在哪裏:)

謝謝!湯姆

回答

3

隨着你的XPATH表達

// Select Node 
XmlNode MyNode = MyDoc.SelectSingleNode("XML/Configuration/Details"); 

您正在選擇一個元素,因此MYNODE的類型將是XmlElement而是XmlElementValue總是null(見MSDN),所以你需要使用XmlElement.InnerTextXmlElement.InnerXml isntead。

因此,改變你的代碼

// Output Node Value 
Console.WriteLine(String.Concat("Details: ", MyNode.InnerText)); 

或者你可以使用XPath text()功能,在這種情況下MYNODE將是XmlText你在哪裏得到它的價值與Value選擇元素的內容:

// Select Node 
XmlNode MyNode = MyDoc.SelectSingleNode("XML/Configuration/Details/text()"); 

// Output Node Value 
Console.WriteLine(String.Concat("Details: ", MyNode.Value)); 

作爲一個小貼士,如果您是在C#中學習XML操作,您應該檢查出LINQ to XML這是在C#中使用XML的另一種/新方法。

+0

嗨Nemesv,謝謝你的回覆;這似乎拉回了正確的文字。我將看看LINQ to XML以及看哪一個。看起來這個社區有三種不同的方法。我認爲這種方法是我不會拉回大的XML文件,所以不需要增加複雜性。並且知道過去的微軟(XNA * Cough *)我很擔心他們會因爲害怕他們會徹底改變或消失 –

0

只是爲了興趣,一個名不見經傳的「簡單」的語法是這樣的:

XmlDocument myDoc = new XmlDocument(); 
myDoc.Load(@"D:\MyXML.XML"); 

string details = myDoc["XML"]["Configuration"]["Details"].InnerText; 

注意,這(和XPath的方法)可以繼續流行,如果你的XML不符合結構你」重新期待,所以你最好在那裏進行一些驗證。

0

U可以使用了XPath庫(U必須包括「System.Xml.XPath」):

XmlDocument document = new XmlDocument(); 
     document.Load("MyXml.xml"); 
     XPathNavigator navigator = document.CreateNavigator(); 

     foreach (XPathNavigator nav in navigator.Select("//Details")) 
     { 
      Console.WriteLine(nav.Value); 

     } 

上面的代碼在迭代每調用(詳細信息)節點中提取信息並打印。

相關問題