用于匹配名称以X开头的任何属性的XPath查询

时间:2017-12-27 11:34:23

标签: xpath

通过此Stack Overflow answer,我可以看到如何匹配以特定字符串开头的任何属性值。例如,查找具有任何属性的元素列表,其值以字母h开头:

//*[@*[starts-with(., 'h')]]

我的问题是如何匹配以特定字符串开头的属性名称

据我了解,@*表示匹配任何元素的更宽//*集合中的任何属性。 starts-with函数有两个参数,haystack和needle,. haystack表示属性值。我觉得我90%都在那里,但我无法弄清楚我需要在属性名称上匹配什么,而不是值

示例匹配:

<example>
    <first match-me="123">MATCH!</first>
    <second do-not-match-me="456">NO MATCH!</second>
    <third match-me-yes-please="789">MATCH!</third>
    <fourth>
        <fifth match-me:oh-yes>MATCH!</fifth>
    </fourth>
</example>

1 个答案:

答案 0 :(得分:3)

&#34;我觉得我90%的路在那里&#34; - 是的,最后一个阶段是指定属性名称方法:

//*[@*[starts-with(name(), 'match-me')]]

注意,依赖于简单的属性名称匹配,在处理match-me:oh-yes(冒号内部)等属性名称时可能会遇到问题。在这种情况下,您可能会收到错误The prefix "match-me" for attribute "match-me:oh-yes" associated with an element type "fifth" is not boundAttribute name "match-me:oh-yes" associated with an element type "fifth" must be followed by the ' = ' character.(如果&#34;无价值&#34;属性)