dr.*_*vil 3 .net xpath attributes contains
我正在尝试在多个不同节点中的多个属性中搜索某些内容
这是我在一个属性中找到它的方式
//*[contains(@name,'KEYA')]
Run Code Online (Sandbox Code Playgroud)
示例XML:
<cars>
<car model="2000" name="Awesome KEYA Car" name2="somethine else">Brand1</car>
<car model="2005" name="Awesome Car" name2="KEYA something else">Brand 2</car>
<car name="Awesome Car" name2="somethine else">Brand1</car>
<car dontmatch="KEYA" name2="somethine else">Brand3333</car>
</cars>
Run Code Online (Sandbox Code Playgroud)
我真正想要的是超过10个属性(它只需匹配列入白名单的属性),
//*[contains((@name or @name2 or @name3),'KEYA')]
Run Code Online (Sandbox Code Playgroud)
使用XPATH 1.0.关于如何做到这一点的任何想法?尝试了除重复包含但不起作用之外的几种方法.
这对我有用
/cars/car/@*[contains(.,'KEYA')]/parent::*
Run Code Online (Sandbox Code Playgroud)
好的,编辑后,我建议
/cars/car/@*[name()!='dontmatch'][contains(.,'KEYA')]/parent::*
Run Code Online (Sandbox Code Playgroud)
如果要排除多个属性,则需要指定其他谓词(方括号内的内容).XPath不提供一种方法来排除集ATTR名字,除非你能约束集用startswith()
或contains()
或类似的东西.
有一些方便的方法可以在其他库中查询XML,例如,如果您使用的是.NET,则可以使用LINQ-to-XML.这将允许您更加简洁地指定这些类型的查询.但它完全是一个不同的API.