[英]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.InnerText或XmlElement.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.