Что не так в моем XPath? - PullRequest
       24

Что не так в моем XPath?

2 голосов
/ 27 января 2010

Здесь у меня есть xml:

<root>
    <field ...>offer</field>
    <field type="ferrari" ...>car</field>
    <field ...>company</field>
    <field ...>whatever</field>
</root>

и я хочу узнать «тип» «автомобиля», извлекая элемент. Я думал что-то вроде этого:

/root[field='car']/field (or /root[field='car'])

было достаточно, но когда я попытался выполнить свой код C #:

XmlDocument document = new XmlDocument();
document.InnerXml = "..."; // xml of above
XmlNode node = document.DocumentElement.SelectSingleNode("... xpath of above ...");

объект «узел» всегда содержит первый дочерний элемент «поле» (предложение) и в случае SelectNodes («... same xpath ...») возвращает все элементы «поле» игнорируя условие .

В чем проблема? XPath неверен?

1 Ответ

2 голосов
/ 27 января 2010
/root/field[text()='car']/@type

Вернет узел, представляющий атрибут «тип» элемента «поле», текстовое значение которого равно «автомобиль». Значение этого XmlNode будет "ferrari".

/root/field[text()='car']

Вернет узел, представляющий элемент «поле» (текстовое значение которого «car»), который вы можете программно получить с помощью атрибута типа:

XmlNode fieldNode = document.DocumentElement.SelectSingleNode(@"/root/field[text()='car']");
string type = fieldNode.Attributes["type"].Value;
//type == "ferrari"
...