用于搜索具有包含特定字符串的ANY属性的节点的Xpath?

emd*_*og4 13 xml xslt search xpath

如果我使用以下XPath,我可以搜索包含在特定属性中 的String/xs:schema/node()/descendant::node()[starts-with(@my-specific-attribute-name-here, 'my-search-string')]

但是,我想搜索包含*a String的任何属性

Kir*_*huk 14

示例XML:

<root>
  <element1 a="hello" b="world"/>
  <element2 c="world" d="hello"/>
  <element3 e="world" f="world"/>
</root>
Run Code Online (Sandbox Code Playgroud)

假设,我们需要选择包含任何属性的元素h.在此示例中:element1,element2.我们可以使用这个XPath:

//*[@*[starts-with(., 'h')]]
Run Code Online (Sandbox Code Playgroud)

在你的样本中:

/xs:schema/node()/descendant::node()
    [@*[starts-with(@my-specific-attribute-name-here, 'my-search-string')]]
Run Code Online (Sandbox Code Playgroud)

  • @埃里克,不。在第二个 XPath 节点集中,传递给 `starts-with` 函数作为第一个参数 (`@*`)。“starts-with”函数通过返回节点集中第一个节点的字符串值(即仅第一个属性)将节点集转换为字符串。 (2认同)

Rob*_*ney 11

您正在寻找的一般模式是:

@*[contains(., 'string')]
Run Code Online (Sandbox Code Playgroud)

它将匹配包含的context元素的任何属性string.因此,如果您只想在整个文档中搜索包含的属性string,您可以使用:

//@*[contains(., 'string')]
Run Code Online (Sandbox Code Playgroud)