XSLT匹配第一个和第二个孩子

时间:2015-01-29 07:59:41

标签: xml xslt xpath xslt-2.0

我有以下的XML。

<para><page num="42"/><content-style font-style="bold">2/1/4</content-style></para>

这里我正在创建一个模板并尝试匹配第一个和第二个孩子,如下所示。

<xsl:template match="para[node()[position() = 2 and self::content-style[matches(., '(\w+)/(\w+)')] and (position() = 1 and self::page)]]">

这时我试试

<xsl:template match="para[node()[(position() = 1 and self::page)]]">

<xsl:template match="para[node()[position() = 2 and self::content-style[matches(., '(\w+)/(\w+)')]]]">

正确调用匹配,但当我如上图所示组合时,它无效,

我需要根据这场比赛执行一些任务,请告诉我哪里出错了以及如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

匹配的节点不能有position() = 1position() = 2,因此您需要使用or而不是and。或者只是在匹配属性中写两个模式

<xsl:template match="para[node()[1][self::page]]
                     | para[node()[2][self::content-style[matches(., '(\w+)/(\w+)')]]]">...</xsl:template>