【问题标题】:How to find if a sub string with XPath 1.0如何使用 XPath 1.0 查找子字符串
【发布时间】:2018-12-17 06:28:21
【问题描述】:

我在尝试在 XPATH 1.0 中查找特定子字符串时遇到问题。此表达式将在代码审查工具 SonarQube 中用于设置约束。

这是我目前在 XPATH 3.0 中的表达式,我已经进行了一些研究以找到转换,但似乎这个表达式在 XPATH 3.0 中的语法是正确的,因为它在 1.0 中是正确的。我是忽略了什么还是只是误会了

//*[contains(.,'@example.com')]

据我了解,这使用 XPATH 1.0 原生的 contains() 函数来搜索它之前的任何 /descendant-or-self::node()/ 路径以包含属性 example.com

【问题讨论】:

  • 您能否分享 HTML 示例以及当前和所需的输出?
  • @Andersson 所以我正在尝试实际解析一个 XML 文件,但这是一个假设的 XML 文件要解析,如果找到子字符串,所需的输出将返回 true <root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org"> <employees> <employee id="1"> <name>Johnny Dape</name> <email email = "example@example.com" /></employee> </employees></root> 我想要它来捕获那封硬编码的电子邮件

标签: xml xpath sonarqube xpath-1.0


【解决方案1】:

//*[contains(.,'@example.com')] 表示“查找具有文本内容且包含子字符串'@example.com'的任何类型的节点”。如果您想“找到具有 attribute 且其值包含 '@example.com' 的节点”,您需要:

  • 任何属性中:

    //*[contains(@*, "@example.com")]
    
  • 具体属性中:

    //*[contains(@email, "@example.com")]
    

如果您想获得所需@attribute 的值:

//*[contains(@email, "@example.com")]/@email

【讨论】:

  • 谢谢!这非常有效。非常翔实的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多