XPath表达式导致另一个表达式

时间:2013-09-05 18:35:22

标签: xpath

我想知道是否有可能将XPath表达式的结果“放在”另一个表达式中。例如:

我有这个表达:

/equipment1/equipment2/equipment3[NAME="TEST"]/Value

我需要在这个表达式中连接该表达式的结果:

test/test2/test3[Id=EQUIPMENT:--HERE THE RESULT OF THE EXPRESSION!!!!--]

这可能构建吗?如果是这样,怎么样?

非常感谢提前!

3 个答案:

答案 0 :(得分:2)

使用变量:计算第一个表达式,将结果绑定到变量,然后在第二个表达式中使用此变量。

/test/test2/test3[@Id=concat("EQUIPMENT:", $param)]

如何绑定变量/参数值的详细信息取决于您使用的XPath API。

答案 1 :(得分:0)

<强> HTML:

<div>
  <p id='foo:1'>foo</p>
  <p id='foo:2'>bar</p>
</div>
<div>
  <p>1</p>
  <p>2</p>
</div>

XPATH 1.0:

//div/p[@id = concat('foo:',//div[2]/p[1])]

XPATH 2.0:

//div/p[@id = string-join(('foo:',//div[2]/p[1]),"")]

<强>输出

<p id="foo:1">foo</p>

答案 2 :(得分:-2)

是的,这绝对是可能的。可能需要进行一些细微更改,但假设NAMEValueId是节点属性而"EQUIPMENT:"是字符串,那么

这是第一个表达式:

/equipment1/equipment2/equipment3[@NAME="TEST"]/@Value

这是第二个:

/test/test2/test3[@Id=concat("EQUIPMENT:", here-goes-the-first-expr)]

两者结合起来:

/test/test2/test3[@Id=concat("EQUIPMENT:", /equipment1/equipment2/equipment3[@NAME="TEST"]/@Value)]

我使用concat()函数来连接两个字符串。


编辑,因为我提出的解决方案似乎是一个肮脏的黑客。正如Michael Kay亲切地解释的那样:

  

一般来说,这个解决方案是错误的,因为上下文   评估内在表达是不正确的。它碰巧工作   对于这个例子,但一般来说是错误的。另外,建设   字符串连接的表达式容易受到代码注入的影响   攻击。使用变量。

因此,该解决方案在OP的具体条件下工作时,不应用于实际生产。如果你真的使用它,请非常非常谨慎。

相关问题