【问题标题】:xpath matches function expression for same name node contentxpath 匹配同名节点内容的函数表达式
【发布时间】:2015-02-23 12:10:45
【问题描述】:

使用下面的示例,我无法运行以下 XPath 表达式://Test[matches(Name1/text(),".*text.*")] 和 ExpressionExpection 是触发器。与//Test[matches(Name/text(),".*text.*")] 表达式相反,正常工作! 请解释为什么以及如何支付这个问题?因为我花了很多时间没有结果。 先感谢您。 我的例子:

<?xml version="1.0"?>
<Root>
  <Test txt="0001" >
    <Name1>text1</Name1>
    <Name2>text2</Name2>
    <Name3>text3</Name3>
  </Test>
  <Test txt="0002" >
    <Name>text4</Name>
    <Name>text5</Name>
    <Name>text6</Name>
  </Test>
 </Root>

【问题讨论】:

  • 它对我来说很好用。能否请您提供完整的代码。
  • 你确定不是反过来吗?我希望//Test[matches(Name/text(),".*text.*")] 会告诉您matches 的第一个参数不能是多个项目的序列。要纠正这个问题,您可以使用//Test[Name[matches(., '.*text.*')]]
  • 感谢 Lingamurthy CS 的关注,这也对我有用,但在在线 xPath 测试器中,我认为问题取决于我程序中使用的包 java xpath!
  • 非常感谢@MartinHonnen,问题确实出在这个问题上。 match() 的第一个参数在我的第二个表达式中提供了更多节点。我试过你的建议,效果很好。非常感谢
  • @abaraa23000,我已将我的评论放入您应该能够接受以正确解决此问题的答案中。

标签: java regex xpath nodes


【解决方案1】:

据我所知,表达式//Test[matches(Name/text(),".*text.*")] 可能会给您的输入样本错误,即不允许将多个项目的序列作为matches 的第一个参数。

要避免这个问题,只需使用//Test[Name[matches(., '.*text.*')]]

表达式 //Test[matches(Name1/text(),".*text.*")] 应该适用于您的示例,因为只有一个 Name1 子级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多