簡體   English   中英

如何使用 XMLDocument 類從 C# 中的 XML 文件中獲取數據?

[英]How to get data from an XML File in C# using XMLDocument class?

大家晚上好,周末快樂!。

我一整天都在嘗試了解如何解析我的簡單 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>

我正在嘗試獲取詳細信息元素中的值(自述)。 下面是我的代碼

// 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();

我的控制台應用程序正在運行並輸出“目標:”,但沒有提供元素中的詳細信息。

有人能明白為什么會發生這種情況嗎,如果我完全不在狀態,也許會給我一些建議? 我以前沒有閱讀 XML 文件的知識; 因此我現在在哪里:)

謝謝! 湯姆

使用您的 XPATH 表達式

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

你是選擇一個元素,因此MYNODE的類型將是XmlElement ,但Value的的XmlElement始終是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 的另一種/更新的方法。

出於興趣,一個鮮為人知的“簡單”語法是這樣的:

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

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

請注意,如果您的 XML 不符合您期望的結構,則此(以及 XPath 方法)可能會變得流行,因此您最好在其中進行一些驗證。

您可以為此使用 Xpath 庫(您必須包含“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);

        }

上面的代碼遍歷每個名​​為 (Details) 的節點,提取信息並打印出來。

如果要從 XML 文件中檢索特定值

 XmlDocument _LocalInfo_Xml = new XmlDocument();
            _LocalInfo_Xml.Load(fileName);
            XmlElement _XmlElement;
            _XmlElement = _LocalInfo_Xml.GetElementsByTagName("UserId")[0] as XmlElement;
            string Value = _XmlElement.InnerText;

值包含文本值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM