C#和XPath结合使用时,通配符属性名和特定属性值怎样处理?

3

我能使用XPath查找所有具有某些字符开头的属性名和属性值包含特定值的元素吗?例如:

<items>
     <item id="item1" attr-name0="UPC" attr-value0="12345" attr-name1="Price" attr-value1="10.00" attr-name2="Enabled" attr-value2="true"/>
     <item id="item2" attr-name0="Price" attr-value0="25.00" attr-name1="Enabled" attr-value1="false"/>
     <item id="item3" attr-name0="Price" attr-value0="10.00" attr-name1="UPC" attr-value1="54321" attr2-name="UPC" attr-value2="abcde"/>
</items>

最终我需要找到具有一个或多个UPC的商品的ID和UPC。最多有11个属性(attr-name0到attr-name10)。我可以使用C#和XML(XPath)/LINQ来完成这个任务。谢谢!

1个回答

4
以下XPath语句应该返回其中一个属性以“attr-name”开头且值为“UPC”的元素: //item[starts-with(@attr-name, 'attr-name') and @attr-name='UPC']
//item[@*[starts-with(name(), 'attr-name') and .='UPC']]

等价的LINQ-to-XML代码大致如下(假设docXDocumentXElement的实例):
doc.Descendants("item")
   .Where(i => i.Attributes()
                .Any(a => a.Name.ToString().StartsWith("attr-name") && a.Value == "UPC")
    );

根据上述XPath和LINQ语句,应该返回XML中的'item1'和'item3'元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接