如何通过匹配via pattern属性和属性值

时间:2016-09-14 09:50:53

标签: xml xpath

我想在XML中找到元素,其中包含命名登录名或用户名,属性值包含超过15个字符。 可能对于第一种情况我需要应用模式

.*(login|username).*

和第二次

^.{15,}$

我真的想以更常见的方式报道此类案件。我需要在XML中找到这样的行。

<props>
    <prop key="foo.bar.login">long_value_with_more_than_15_chars</prop>
    <prop name="username.foo.bar" value="long_value__with_more_than_15_chars"/>
    <prop foo.login.bar="long_value_with_more_than_15_chars"/>
</props>

foo.bar.login,username.foo.bar和foo.login.bar的长度并不重要。 所以为此我需要使用XPath,但我无法理解如何应用模式。

3 个答案:

答案 0 :(得分:1)

不要将问题从一个编辑到另一个给定的信息。请澄清您的期望。

Xpath 2.0:

//*[@*[matches(name(),"login|username") or matches(., "login|username")]][(@value and string-length(@value) gt 15) or string-length() gt 15]

Xpath 1.0:

//*[@*[contains(name(),"login") or contains(name(), "username") or contains(.,"login") or contains(., "username")]][(@value and string-length(@value) > 15) or string-length() > 15]

<强>解释

attributename 中搜索字符串loginusername的属性的或属性value的值更大超过15个字符或节点值大于15个字符。

如果你愿意,可以试一试。否则请解释您的结果问题。

答案 1 :(得分:1)

怎么样

//*[@*[(contains(.,'login') or contains(.,'username')) and string-length() > 15]]

答案 2 :(得分:1)

对于xpath 1,它可能会读取

//*[@*[(contains(name(),'login') or contains(name(),'username'))
       and string-length(.) &gt; 15]