如何获取 System.Xml.Linq.XNode 的名字?

How to get name of System.Xml.Linq.XNode?

每个 XML 元素,如 <title /> 都有一个名称 - "title"。 我使用 foreach 枚举 XNode.Nodes() 方法提供的项目,并按标签名称处理每个项目。

我将 XNode 转换为 XElement,以访问 XElement.Name.LocalName 属性以获取标签名称,如 "title".

foreach(XElement as_element in doc.Nodes())

在我尝试解析这个标签后出现了问题:

<title>"Some text"</title>

现在它的类型是 XText (: XNode),我无法将它转换为 XElement。我得到一个 InvalidCastException。 我怎样才能得到 XNode 的 "name"?

INode 并不总是有名字的。最好使用Elements()而不是Nodes()来枚举XElement内部的子元素,那么我们有一个IEnumerable<XElement>.

如果你有一个元素类型的节点,你可以投它:

if (node.NodeType == XmlNodeType.Element) {
    var el = (XElement)node;
    Console.WriteLine(el.Name);
}