如何使用XMLDocument类从C#中的XML文件中获取数据?

时间:2013-06-29 18:24:37

标签: c# xml xmldocument

祝大家晚安,周末愉快!

我一直在努力了解如何解析我的简单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>

我试图获取details元素中的值(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();

我的控制台应用程序正在运行并输出“目标:”但未向我提供元素中的详细信息。

有人能看出为什么会发生这种情况,如果我完全无法驾驶,也许可以给我一些建议吗?我以前没有读过XML文件的知识;因此,我现在在哪里:)

谢谢!汤姆

4 个答案:

答案 0 :(得分:3)

使用您的XPATH表达式

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

您选择的是一个元素,因此MyNode的类型将为XmlElement,但Value的{​​{1}}始终为XmlElement(请参阅MSDN )所以你需要使用XmlElement.InnerTextXmlElement.InnerXml isntead。

所以将代码更改为

null

或者您可以使用XPATH // Output Node Value Console.WriteLine(String.Concat("Details: ", MyNode.InnerText)); 函数选择元素的内容,在这种情况下,MyNode将为text(),您可以使用XmlText获取其值:

Value

如果您在C#中学习XML操作,那么作为旁注,您应该查看LINQ to XML这是在C#中使用XML的另一种/更新方式。

答案 1 :(得分:0)

仅仅是为了感兴趣,一个鲜为人知的“简单”语法是:

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

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

请注意,如果您的XML不符合您期望的结构,那么这个(以及XPath方法)可能会弹出,因此您最好在那里进行一些验证。

答案 2 :(得分:0)

你可以使用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)的节点提取信息并打印出来。

答案 3 :(得分:0)

如果要从XML文件中检索特定值

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

值包含文本值