带有通配符属性名称和特定属性值的{C#和XPath

时间:2016-06-08 13:21:33

标签: c# xml linq xpath

我是否可以使用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 个答案:

答案 0 :(得分:1)

以下XPath应返回<item>个元素,其中一个属性以&#39; attr-name&#39;开头。有价值的UPC&#39; :

//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")
    );

鉴于有问题的XML,&#39; item1&#39;和&#39; item3&#39;元素应该由上面的XPath和LINQ返回。