XPath: выбрать узел на основе другого узла? - PullRequest
3 голосов
/ 01 июня 2011

Рассмотрим следующее 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 ]

7 голосов
/ 01 июня 2011

Ваши данные 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);
1 голос
/ 01 июня 2011

Вам нужно:

/Items/Item[Code="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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...