0

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

我有这个表达:

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

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

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

这样可以建吗?如果是这样,怎么做?

提前谢谢了!

4

3 回答 3

2

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

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

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

于 2013-09-05T20:12:11.100 回答
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>
于 2013-09-05T18:45:18.070 回答
-2

是的,这是绝对可能的。可能需要进行一些细微的更改,但假设NAME,ValueId是节点属性并且"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 的具体条件下工作时,不应在实际生产中使用。如果你真的使用这个,请非常非常谨慎。

于 2013-09-05T18:43:58.187 回答