Использование SelectSingleNode для получения значения атрибута

Я хочу получить значение атрибута узла, используя SelectSingleNode. Я уже проверил здесь.

Я уже пробовал эти селекторы, но они возвращают исключение нулевой ссылки: node.SelectSingleNode("/@id").InnerText node.SelectSingleNode("@id").InnerText

Вот часть XML, который я пытаюсь разобрать:

<?xml version="1.0" encoding="utf-8"?>
    <products>
        <product ID="4de">
            <name>Prod name</name>
        </product>
        <product ID="4dea">
            <name>Prod name 2</name>
        </product>      
</products>


Dim productXML As New XmlDocument
Dim node As XmlNode
Dim root As XmlNode
productXML.LoadXml(responseString)
Dim mgr As XmlNamespaceManager = New XmlNamespaceManager(productXML.NameTable)
mgr.AddNamespace("test", productXML.DocumentElement.NamespaceURI)

root = productXML.DocumentElement
Dim nodeList As XmlNodeList = root.SelectNodes("/products/product")

'to get the product title (this works): 
node.SelectSingleNode("name").InnerText

Как я могу получить значение атрибута «ID» узла product через SelectSingleNode?


person Flo    schedule 19.07.2015    source источник


Ответы (1)


Обратите внимание, что XML чувствителен к регистру, поэтому вместо этого вы должны были использовать @ID в верхнем регистре:

node.SelectSingleNode("@ID").InnerText

Демонстрация (на C#): https://dotnetfiddle.net/TWMulD

var xml = @" <products>
        <product ID='4de'>
            <name>Prod name</name>
        </product>
        <product ID='4dea'>
            <name>Prod name 2</name>
        </product>      
</products>";
var root = new XmlDocument();
root.LoadXml(xml);
var nodeList = root.SelectNodes("/products/product");
foreach (XmlNode node in nodeList)
{
    var id = node.SelectSingleNode("@ID").InnerText;
    Console.WriteLine(id);
}

вывод:

4de
4dea
person har07    schedule 19.07.2015