我想知道是否可以将 XPath 表达式的结果放在另一个表达式“内部”。例如:
我有这个表达:
/equipment1/equipment2/equipment3[NAME="TEST"]/Value
我需要在这个表达式中连接该表达式的结果:
test/test2/test3[Id=EQUIPMENT:--HERE THE RESULT OF THE EXPRESSION!!!!--]
这样可以建吗?如果是这样,怎么做?
提前谢谢了!
我想知道是否可以将 XPath 表达式的结果放在另一个表达式“内部”。例如:
我有这个表达:
/equipment1/equipment2/equipment3[NAME="TEST"]/Value
我需要在这个表达式中连接该表达式的结果:
test/test2/test3[Id=EQUIPMENT:--HERE THE RESULT OF THE EXPRESSION!!!!--]
这样可以建吗?如果是这样,怎么做?
提前谢谢了!
使用变量:计算第一个表达式,将结果绑定到一个变量,然后在第二个表达式中使用这个变量。
/test/test2/test3[@Id=concat("EQUIPMENT:", $param)]
如何绑定变量/参数值的详细信息取决于您使用的 XPath API。
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>
是的,这是绝对可能的。可能需要进行一些细微的更改,但假设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 的具体条件下工作时,不应在实际生产中使用。如果你真的使用这个,请非常非常谨慎。