我想知道是否有可能将XPath表达式的结果“放在”另一个表达式中。例如:
我有这个表达:
/equipment1/equipment2/equipment3[NAME="TEST"]/Value
我需要在这个表达式中连接该表达式的结果:
test/test2/test3[Id=EQUIPMENT:--HERE THE RESULT OF THE EXPRESSION!!!!--]
这可能构建吗?如果是这样,怎么样?
非常感谢提前!
答案 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)
是的,这绝对是可能的。可能需要进行一些细微更改,但假设NAME
,Value
和Id
是节点属性而"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的具体条件下工作时,不应用于实际生产。如果你真的使用它,请非常非常谨慎。