得到不同的脚注实例

时间:2014-05-07 14:28:25

标签: 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>
    </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">&#60;</xsl:variable>
        <xsl:variable name="apos">'</xsl:variable>
        <xsl:variable name="cl">&#62;</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>

我得到以下输出

&lt;?pb label='138'?&gt;<div class="tr_footnote">
                <div class="footnote">
                    <sup>
                        <a name="ftn.855" href="#f855" class="tr_ftn">855</a>
                    </sup>a</div>
            </div>&lt;?pb label='138'?&gt;<div class="tr_footnote">
                <div class="footnote">
                    <sup>
                        <a name="ftn.857" href="#f857" class="tr_ftn">857</a>
                    </sup>b</div>
            </div>&lt;?pb label='138'?&gt;<div class="tr_footnote">
                <div class="footnote">
                    <sup>
                        <a name="ftn.860" href="#f860" class="tr_ftn">860</a>
                    </sup>c</div>
            </div>&lt;?pb label='138'?&gt;<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>&lt;?pb label='138'?&gt;<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>

但我希望输出如下。

&lt;?pb label='138'?&gt;<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标记,其余部分应该被忽略。

请让我知道我该怎么做。

由于

1 个答案:

答案 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>