我的XML看起来像这样:
<detail>
<address>
<line1/>
<line2/>
<line3/>
<postcode/>
</address>
</detail/>
我想要选择任意数量的<line*>
个节点,以及我不想选择的其他节点。
我试过这个,但似乎无法工作(无论如何都是C#):
/detail/address/[substring(name(),4) = 'line']
Al,非常感谢!
答案 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']