Xslt 获取不同的脚注实例
我的XML中有以下大小写Xslt 获取不同的脚注实例,xslt,Xslt,我的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> </par
<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>
我得到下面的输出
<?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标签='138'?
A.
?pb标签='138'?
B
?pb标签='138'?
C
?pb标签='138'?
见[8-209]。
?pb标签='138'?
[1896]2 Ch 743。
但我希望输出如下
<?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>
?pb标签='138'?
A.
B
C
见[8-209]。
[1896]2 Ch 743。
i、 e.页码
后面的第一个脚注应带有pb标签
标签,脚注位置可忽略。i、 e.脚注可以在XML中的任何位置,但第段后面的第一个脚注应带有pb标签
标记,其余部分应忽略
请告诉我怎么做
谢谢您的处理指令会重复很多次,因为它是在一个经过多次处理的模板中调用的。如果只出现一次,则应在只调用一次的模板(例如
main
的模板)中打印它
您似乎还在尝试打印处理指令。使用xsl:processing指令
更容易做到这一点。因此,您可以在主模板
或根模板中测试前面的页面
元素,并仅处理这些脚注(您必须决定如何处理没有前面页面的脚注):
这是一个完整的样式表,它使用了这些模板,并对源代码中的其他节点进行了处理。也许你想做这样的事
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="main">
<xsl:apply-templates select="para"/>
<xsl:if test="//footnote[preceding::page]">
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="//footnote/preceding::page/@num"/>
<xsl:text>'</xsl:text>
</xsl:processing-instruction>
<xsl:apply-templates select="para//footnote[preceding::page]"/>
</xsl:if>
</xsl:template>
<xsl:template match="para">
<p title="{@num}"><xsl:apply-templates select="node()[not(name() = 'footnote')]"/></p>
</xsl:template>
<xsl:template match="footnoteref">
<sup><a href="{@linkend}"><xsl:value-of select="@num"/></a></sup>
</xsl:template>
<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>
</xsl:stylesheet>
标签
'
元素
在哪里?您好@helderdarocha,它在我的XML的第三行,您在哪里生成这些div?如果可能的话,请添加整个XSLT样式表。我已经更新了我的XSLT@Helderdarochaar您真的想打印?pb标签=“”?
?还是您试图打印的是一条处理指令(如
)?嗨@helderdarocha,当我应用此方法时,仍然重复脚注numbres,我已经上传了我的XML和XSLT,请查看一下。谢谢。如果你看到你所问的XML和XSLT没有正确地再现你的实际问题,你可以得到我得到的确切结果。如果您有许多page
元素,并且每个元素都需要一条处理指令(而不仅仅是一条),那么您不能使用previous::page
,因为这将匹配所有元素(如我在上面第三段中所述)。在这种情况下,您需要使用完全不同的方法。也许你可以利用这些信息重写一个新的问题,更好地描述你的问题。如果我理解正确,你希望为每个页面
元素打印一条处理指令。它们应该在最后一个页面
元素之后出现的第一个脚注元素之前立即打印,直到出现下一个页面
元素,这将清除所有内容并重新开始。实际上,您需要使用分组(按最后出现的页面
对脚注进行分组)。如果这是你的问题,试着写一个例子(一个概念性的例子,可能有2或3个page
元素,每个元素有1或2个脚注)来揭示这个问题。当然,给我几分钟时间
<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>
<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>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="main">
<xsl:apply-templates select="para"/>
<xsl:if test="//footnote[preceding::page]">
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="//footnote/preceding::page/@num"/>
<xsl:text>'</xsl:text>
</xsl:processing-instruction>
<xsl:apply-templates select="para//footnote[preceding::page]"/>
</xsl:if>
</xsl:template>
<xsl:template match="para">
<p title="{@num}"><xsl:apply-templates select="node()[not(name() = 'footnote')]"/></p>
</xsl:template>
<xsl:template match="footnoteref">
<sup><a href="{@linkend}"><xsl:value-of select="@num"/></a></sup>
</xsl:template>
<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>
</xsl:stylesheet>