XPath:根据另一个节点选择一个节点?

时间:2011-06-01 15:25:27

标签: c# xml 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 个答案:

答案 0 :(得分:7)

您的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 :(得分:1)

你需要:

/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>