XPath选择名称以其开头的节点

时间:2014-09-10 10:01:54

标签: c# xml xpath

我的XML看起来像这样:

<detail>
  <address>
    <line1/>
    <line2/>
    <line3/>
    <postcode/>
  </address>
</detail/>

我想要选择任意数量的<line*>个节点,以及我不想选择的其他节点。

我试过这个,但似乎无法工作(无论如何都是C#):

/detail/address/[substring(name(),4) = 'line']

Al,非常感谢!

4 个答案:

答案 0 :(得分:5)

/detail/address/*[starts-with(name(), 'line')]

答案 1 :(得分:1)

从内存来看,我认为索引是基于1而不是基于0。也许这会奏效:

/detail/address/[substring(name(),1,3) = 'line']

或者,您是否可以控制XML的格式?如果是这样,一个更好的方法可能就是这样构建它:

<detail>
  <address>
    <line number='1'/>
    <line number='2'/>
    <line number='3'/>
    <postcode/>
  </address>
</detail/>

然后您可以使用以下内容检索这些行:

/detail/address/line

答案 2 :(得分:1)

考虑使用XDocuments。

        XDocument doc = XDocument.Parse(xmlString);
        foreach (XElement element in doc.Descendants())
        {

            if(element.Name.LocalName.StartsWith("line"))
               //DoStuffWithValueOfThatElement(element.Value)...
        }

答案 3 :(得分:1)

您可以尝试contains

/detail/address/*[contains(name(),'line')]

如果您想使用substring,您必须知道索引以1开头而且您还缺少通配符:

/detail/address/*[substring(name(),1,4) = 'line']