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>
Другие вопросы по тегам