XPath:starts-with和值列表

时间:2017-10-02 13:14:13

标签: xml xpath xpath-2.0

此xpath表达式返回文本值列表:

/some/xpath/expression/@Image

(此表达式返回多个值)

还有另一个xpath表达式:

/other/xpath/expression[starts-with(@Image, 'value')]

我需要选择给定遗产的所有/other/xpath/expression/@Image属性,这些属性的值以我使用/some/xpath/expression/@Image获得的值之一开始。我该如何组合这些表达式?这可能吗?我需要这样的东西

/other/xpath/expression[starts-with(@Image, /some/xpath/expression/@Image)]

2 个答案:

答案 0 :(得分:1)

这个XPath,

/some/xpath/expression/@Image[starts-with(.,'value')]

将选择给定遗产的所有@Image属性,其值以字符串value开头。

更新以解决评论中的后续行动:

如果'value'不是文字,而是要从文档的其他位置获取,只需将'value'替换为选择值的XPath:

/some/xpath/expression/@Image
   [starts-with(., /other/xpath/expression/@Image)]

答案 1 :(得分:1)

如果我们绑定一些变量,它可能更清楚:

<xsl:variable name="S" as="xs:string*" select="/some/xpath/expression/@Image"/>

还有另一个xpath表达式:

<xsl:variable name="O" as="xs:string*" select=/other/xpath/expression"/>

我需要选择all / other / xpath / expression / @ Image属性,其值以$ s中的值开头。

那将是

$O[some $s in $S satisfies(starts-with(., $s)]

技术说明:在XPath中很少需要这样的表达式,但它发生在这里是因为您正在进行不是等连接的连接。为此,您需要两个范围变量:上下文项"."可用于其中一个,但另一个需要明确。在XSLT中,有时可以使用current()作为第二个范围变量。