XPATH查询以查找包含关键字的属性

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.关于如何做到这一点的任何想法?尝试了除重复包含但不起作用之外的几种方法.

Che*_*eso 5

这对我有用

/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.