我有以下的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+)')]]]">
正确调用匹配,但当我如上图所示组合时,它无效,
我需要根据这场比赛执行一些任务,请告诉我哪里出错了以及如何解决这个问题。
由于
答案 0 :(得分:1)
匹配的节点不能有position() = 1
和position() = 2
,因此您需要使用or
而不是and
。或者只是在匹配属性中写两个模式
<xsl:template match="para[node()[1][self::page]]
| para[node()[2][self::content-style[matches(., '(\w+)/(\w+)')]]]">...</xsl:template>