Как получить имя 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?

Ответ 1

INode не всегда имеет имя. Лучше использовать Elements() вместо Nodes(), чтобы перечислять дочерние элементы внутри XElement, тогда мы имеем IEnumerable<XElement>.

Ответ 2

если у вас есть узел типа элемента, вы можете привести его:

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