我想在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,但我无法理解如何应用模式。
答案 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 中搜索字符串login
和username
的属性的值或属性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(.) > 15]