XPath包含()不起作用

时间:2018-06-06 13:10:39

标签: xml xpath aem jcr

我们正试图让所有包含属性值的节点从字符串"/content/retail/mx/mexico/es/"下面开始。为此,我们编写了一个AEM XPath查询:

/jcr:root/content/retail/mx/mexico//* 
[
jcr:contains(., '/content/retail/mx/mexico/es/' ) 
] 

我们正在获得结果,但问题是我们正在获得那些包含属性值"/content/retail/mx/mexico/es_mexico"的节点的结果。似乎XPath不考虑路径中的最后"/"

无论如何都要逃避,以便我们不会得到具有es_mexico的节点的结果?

1 个答案:

答案 0 :(得分:1)

通常在XPath中,contains()会测试 子字符串包含

如果您想要 字符串相等 ,请使用=等于运算符并将字符串作为参数。

此外,你的XPath,

/jcr:root/content/retail/mx/mexico//* 
[
jcr:contains(., '/content/retail/mx/mexico/es/' ) 
] 

有许多值得注意的方面:

  1. 您使用的是特殊的jcr:contains()函数,而不是XPath contains()。为什么?
  2. 您正在测试.下所有元素//*的字符串值/jcr:root/content/retail/mx/mexico/。除了子元素之外,这可能会导致几个祖先元素的选择 - 可能不是你期望的。
  3. 您正在针对类似XPath的文字字符串测试字符串内容。为什么?