TOC

This article is currently in the process of being translated into Chinese (~58% done).

XML:

Working with the XmlNode class

在前一章中,我们使用XmlDocument类来解析XML文件。示例中引入了一个新类,对于使用XmlDocument解析XML来说,这个类非常重要:XmlNode类。XML基本上被解析为一个XmlNode,它是根元素,然后你就可以使用ChildNodes属性来访问子元素。另外,XmlNode类还允许您访问许多其他信息,例如标记的名称、属性、inner text和XML本身。本章简要描述了XmlNode类的一些更有趣的方面,而了解这些方面非常重要,因为在使用XmlDocument类解析XML时,XmlNode类是一个非常关键的概念。在下面的示例中,我们将大量使用DocumentElement,虽然它实际上是XmlElement类型,但XmlElement确实继承自XmlNode,所以本质上它们是相同的。

Name属性将简单地给出节点的名称。例如,下面的例子将输出文本“user”:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<user name=\"John Doe\">A user node</user>");
Console.WriteLine(xmlDoc.DocumentElement.Name);
Console.ReadKey();

InnerText属性将保存包标记开始和结束中的文本,如下所示:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<test>InnerText is here</test>");
Console.WriteLine(xmlDoc.DocumentElement.InnerText);
Console.ReadKey();

InnerXml属性有点像InnerText属性,但是InnerText会删除其中的任何XML,而InnerXml属性显然不会。下面的例子可以说明这种区别:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<users><user>InnerText/InnerXml is here</user></users>");
Console.WriteLine("InnerXml: " + xmlDoc.DocumentElement.InnerXml);
Console.WriteLine("InnerText: " + xmlDoc.DocumentElement.InnerText);
Console.ReadKey();

OuterXml属性与InnerXml相同,但它也将包含节点本身的XML。下面的例子可以说明这种区别:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<users><user>InnerText/InnerXml is here</user></users>");
Console.WriteLine("InnerXml: " + xmlDoc.DocumentElement.InnerXml);
Console.WriteLine("OuterXml: " + xmlDoc.DocumentElement.OuterXml);
Console.ReadKey();

我们在前一章中访问了属性,这里是另一个例子:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<user name=\"John Doe\" age=\"42\"></user>");
if(xmlDoc.DocumentElement.Attributes["name"] != null)
    Console.WriteLine(xmlDoc.DocumentElement.Attributes["name"].Value);
if(xmlDoc.DocumentElement.Attributes["age"] != null)
    Console.WriteLine(xmlDoc.DocumentElement.Attributes["age"].Value);
Console.ReadKey();

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!