我的XML中有以下情况。
<main>
<para num="1.12.10">
since no <page num="138"/>principal.
<footnoteref linkend="fn855" num="855"/><footnote num="855" id="fn855" number-type="arabic"></footnote>
</para>
<para num="1.12.11">
In other pl<footnoteref linkend="fn857" num="857"/>
<footnote num="857" id="fn857" number-type="arabic">
</footnote>short of the fraud of the agent.
<footnoteref linkend="fn860" num="860"/>
<footnote num="860" id="fn860" number-type="arabic"></footnote><footnoteref linkend="fn861" num="861"/><footnote num="861" id="fn861" number-type="arabic">
<para>At [8-209].</para>
</footnote>
</para>
<para num="1.12.12">
Indeed, in some non-property cases such as
<footnoteref linkend="fn862" num="862"/>
<footnote num="862" id="fn862" number-type="arabic">
<para>
<case>[1896] 2 Ch 743</case>.
</para>
</footnote>
</para>
</main>
来自footnotes template
我使用以下内容。
<xsl:template match="footnote">
<xsl:if test="preceding::page[1]">
<xsl:variable name="op"><</xsl:variable>
<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="cl">></xsl:variable>
<xsl:value-of select="concat($op,'?pb label=',$apos,preceding::page[1]/@num,$apos,'?',$cl)"/>
</xsl:if>
<div class="tr_footnote">
<div class="footnote">
<sup>
<a>
<xsl:attribute name="name"><xsl:text>ftn.</xsl:text><xsl:value-of select="@num"/></xsl:attribute>
<xsl:attribute name="href"><xsl:text>#f</xsl:text><xsl:value-of select="@num"/></xsl:attribute>
<xsl:attribute name="class"><xsl:text>tr_ftn</xsl:text></xsl:attribute>
<xsl:value-of select="@num"/>
</a>
</sup>
<xsl:apply-templates/>
</div>
</div>
</xsl:template>
我得到以下输出
<?pb label='138'?><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.855" href="#f855" class="tr_ftn">855</a>
</sup>a</div>
</div><?pb label='138'?><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.857" href="#f857" class="tr_ftn">857</a>
</sup>b</div>
</div><?pb label='138'?><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.860" href="#f860" class="tr_ftn">860</a>
</sup>c</div>
</div><?pb label='138'?><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.861" href="#f861" class="tr_ftn">861</a>
</sup>At [8-209].</div>
</div><?pb label='138'?><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.862" href="#f862" class="tr_ftn">862</a>
</sup>[1896] 2 Ch 743.
</div>
</div>
但我希望输出如下。
<?pb label='138'?><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.855" href="#f855" class="tr_ftn">855</a>
</sup>a</div>
</div><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.857" href="#f857" class="tr_ftn">857</a>
</sup>b</div>
</div><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.860" href="#f860" class="tr_ftn">860</a>
</sup>c</div>
</div><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.861" href="#f861" class="tr_ftn">861</a>
</sup>At [8-209].</div>
</div><div class="tr_footnote">
<div class="footnote">
<sup>
<a name="ftn.862" href="#f862" class="tr_ftn">862</a>
</sup>[1896] 2 Ch 743.
</div>
</div>
即。 page number
后面的第一个脚注应该有pb label
标记,脚注位置可以忽略。即脚注可以是XML中的任何位置,但是段落后面的第一个脚注应该是pb label
标记,其余部分应该被忽略。
请让我知道我该怎么做。
由于
答案 0 :(得分:0)
您的处理指令会重复多次,因为它是在多次处理的模板中调用的。如果只发生一次,则应将其打印在仅调用一次的模板中(例如main
的模板)。
您似乎也在尝试打印处理指令。使用xsl:processing-instruction
更容易做到这一点。因此,您可以测试page
或根模板中的前一个main
元素,并仅处理这些脚注(您必须决定如何处理没有前一页的脚注):< / p>
<xsl:if test="//footnote[preceding::page]">
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="//footnote/preceding::page[1]/@num"/>
<xsl:text>'</xsl:text>
</xsl:processing-instruction>
<xsl:apply-templates select="//footnote[preceding::page]"/>
</xsl:if>
我假设你只有一个 page
元素。如果你有很多,那么谓词 test 仍会匹配所有任何前面的page
元素的脚注([1]
谓词放在{{{ test 中的1}}不会改变 - 测试之前的 page
或任何前面的page
是否相同但是将选择 之前的值。
您的page
模板(将被多次调用)只需要处理脚注本身的内容。您可以使用属性值模板进行处理,或者只使用您想要的字符串值,而不必使用footnote
:
xsl:attribute
这是一个完整的样式表,它使用这些模板,并对源代码中存在的其他节点执行某些操作。也许你想做这样的事情。
<xsl:template match="footnote">
<div class="tr_footnote">
<div class="footnote">
<sup><a name="{@id}" href="#f" class="tr_ftn"><xsl:value-of select="@num"/></a></sup>
<xsl:apply-templates/>
</div>
</div>
</xsl:template>