我是以下的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]
,因为我想赶上第一次出现。
由于
答案 0 :(得分:0)
我刚刚在xmlplayground上尝试了你的代码,star.page元素都到达了模板,但if子句阻止了第一个到达输出。