模式虽然声明不匹配

时间:2014-11-21 14:09:03

标签: xslt-2.0

我是以下的XML。

<root>
    <para>
      <label>5.</label> In essence, the Court in <star.page>19</star.page>
    </para>
    <para>
      <label><star.page>21</star.page> 13.</label>  Frankly, I cannot see how 
            one can escape          
    </para>
</root>

并使用以下XSLT。

    <xsl:template match="para">
      <xsl:apply-templates select="./node()[1][self::star.page]|./label/node()[1][self::star.page]" mode="first"/>
    </xsl:template>

   <xsl:template match="star.page" mode="first">
  <xsl:if test="preceding::star.page">
    <xsl:processing-instruction name="pb">
      <xsl:text>label='</xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>'</xsl:text>
      <xsl:text>?</xsl:text>
    </xsl:processing-instruction>
    <a name="{concat('pg_',.)}"/>
  </xsl:if>
</xsl:template>

当我尝试运行此代码时,第一个star.page段被捕获,但第二个star.page,即<para><label><star.page>21</star.page> 13.</label>...未被捕获。请让我知道我哪里错了。在这里我采取[1],因为我想赶上第一次出现。

由于

1 个答案:

答案 0 :(得分:0)

我刚刚在xmlplayground上尝试了你的代码,star.page元素都到达了模板,但if子句阻止了第一个到达输出。