XPath: выбрать узел на основе другого узла?
Рассмотрим следующее XML
:
<Items>
<Item>
<Code>Test</Code>
<Value>Test</Value>
</Item>
<Item>
<Code>MyCode</Code>
<Value>MyValue</Value>
</Item>
<Item>
<Code>AnotherItem</Code>
<Value>Another value</Value>
</Item>
</Items>
Я хотел бы выбрать Value
узел Item
это имеет Code
узел со значением MyCode
, Как бы я пошел об использовании XPath
?
Я пытался использовать Items/Item[Code=MyCode]/Value
но это не похоже на работу.
2 ответа
Решение
Ваши данные XML неверны. Value
тег не имеет правильных закрывающих тегов, и ваш Item
у тегов нет соответствующих закрывающих тегов (</Item>
).
Что касается вашего XPath, попробуйте заключить в кавычки данные, которые вы хотите сопоставить:
const string xmlString =
@"<Items>
<Item>
<Code>Test</Code>
<Value>Test</Value>
</Item>
<Item>
<Code>MyCode</Code>
<Value>MyValue</Value>
</Item>
<Item>
<Code>AnotherItem</Code>
<Value>Another value</Value>
</Item>
</Items>";
var doc = new XmlDocument();
doc.LoadXml(xmlString);
XmlElement element = (XmlElement)doc.SelectSingleNode("Items/Item[Code='MyCode']/Value");
Console.WriteLine(element.InnerText);
Тебе нужно:
/ Продукты / Пункт [Код ="MyCode"]/Value
Предполагая, что вы исправили свой XML:
<?xml version="1.0"?>
<Items>
<Item>
<Code>Test</Code>
<Value>Test</Value>
</Item>
<Item>
<Code>MyCode</Code>
<Value>MyValue</Value>
</Item>
<Item>
<Code>AnotherItem</Code>
<Value>Another value</Value>
</Item>
</Items>