如何使用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>

我正在尝试获取details元素中的值(自述).下面是我的代码

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

我的控制台应用程序正在运行并输出“ Target:”,但没有在元素中提供详细信息.

有人可以看到为什么会这样吗,如果我完全脱离方向盘,也许可以给我一些建议?我以前没有阅读XML文件的知识.因此,我现在在哪里:)

谢谢!汤姆

解决方法:

使用您的XPATH表达式

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

您正在选择一个元素,因此MyNode的类型将为XmlElement,但XmlElement的值始终为null(请参见MSDN),因此您需要使用XmlElement.InnerTextXmlElement.InnerXml istead.

所以将您的代码更改为

// 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的C#xml读/写/ xpath


下一篇:C# XML封装