我正在编写一个模板,如果在main
之后有一个包含footnote
的处理指令,而在这两个之间没有另一个footnote
(the processing instruction
和{ {1}})我需要添加一行。
以下是我的XML。
current footnote
我正在尝试使用下面的XSLT。
<?xml version="1.0" encoding="UTF-8"?>
<body>
<?xpp MAIN;2;0;0;0;45;0;0?>
<?xpp foot;art10_ft7;suppress?>
<?xpp FOOT;art10_ft7;1?>
<footnote label="7" id="art10_ft7">
<para>
text
</para>
</footnote>
<?xpp foot;art10_ft8;suppress?>
<?xpp FOOT;art10_ft8;1?>
<footnote label="8" id="art10_ft8">
<para>
text
</para>
</footnote>
<?xpp foot;art10_ft9;suppress?>
<?xpp FOOT;art10_ft9;1?>
<footnote label="9" id="art10_ft9">
<para>
text
</para>
</footnote>
<?xpp MAIN;3;0;0;0;46;0;0?>
<?xpp foot;art10_ft20;suppress?>
<?xpp FOOT;art10_ft20;1?>
<footnote label="20" id="art10_ft20">
<para>text</para>
</footnote>
<?xpp foot;art10_ft20;suppress?>
<?xpp FOOT;art10_ft20;1?>
<footnote label="21" id="art10_ft20">
<para>text</para>
</footnote>
<?xpp foot;art10_ft20;suppress?>
<?xpp FOOT;art10_ft20;1?>
<footnote label="22" id="art10_ft20">
<para>text</para>
</footnote>
<?xpp MAIN;3;0;0;0;46;0;0?>
<?xpp foot;art10_ft20;suppress?>
<?xpp FOOT;art10_ft20;1?>
<footnote label="23" id="art10_ft20">
<para>text</para>
</footnote>
</body>
目前我得到的是以下输出。
<xsl:template match="footnote" mode="footnote">
<xsl:variable name="count" select="count(preceding::footnote)+1"/>
<div class="tr_footnote">
<div class="footnote">
<sup>
<a>
<xsl:attribute name="name"><xsl:text>ftn.</xsl:text><xsl:value-of select="$count"/></xsl:attribute>
<xsl:attribute name="href"><xsl:text>#f</xsl:text><xsl:value-of select="$count"/></xsl:attribute>
<xsl:attribute name="class"><xsl:text>tr_ftn</xsl:text></xsl:attribute>
<xsl:value-of select="@label"/>
</a>
</sup>
<xsl:apply-templates/>
</div>
</div>
<!--Here I need the change-->
<xsl:if test="following::processing-instruction('xpp')/text()[contains(.,'MAIN')][1][preceding::footnote[1]/@label=./@label]">
<xsl:text>-------------------------</xsl:text>
</xsl:if>
</xsl:template>
我的预期输出是
<section class="tr_footnotes"><hr /><?pb label=''?>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.1" href="#f1" class="tr_ftn">7</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.2" href="#f2" class="tr_ftn">8</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.3" href="#f3" class="tr_ftn">9</a></sup>
<para>text</para>
</div>
</div><?pb label=''?>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.4" href="#f4" class="tr_ftn">20</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.5" href="#f5" class="tr_ftn">21</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.6" href="#f6" class="tr_ftn">22</a></sup>
<para>text</para>
</div>
</div><?pb label=''?>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.7" href="#f7" class="tr_ftn">23</a></sup>
<para>text</para>
</div>
</div>
</section>
条件是这样的。它有一个<!DOCTYPE html
PUBLIC "XSLT-compat">
<hmtl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New Version!</title>
</head>
<section class="tr_footnotes"><hr /><?pb label=''?>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.1" href="#f1" class="tr_ftn">7</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.2" href="#f2" class="tr_ftn">8</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.3" href="#f3" class="tr_ftn">9</a></sup>
<para>text</para>
</div>
</div>-------------------------<?pb label=''?>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.4" href="#f4" class="tr_ftn">20</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.5" href="#f5" class="tr_ftn">21</a></sup>
<para>text</para>
</div>
</div>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.6" href="#f6" class="tr_ftn">22</a></sup>
<para>text</para>
</div>
</div>-------------------------<?pb label=''?>
<div class="tr_footnote">
<div class="footnote"><sup><a name="ftn.7" href="#f7" class="tr_ftn">23</a></sup>
<para>text</para>
</div>
</div>
</section>
</hmtl>
和footnote
处理指令,它们有两种类型。 following
和<?xpp MAIN;2;0;0;0;45;0;0?>
。在这里,我的查询是我需要匹配<?xpp foot;art10_ft7;suppress?>
following processing instruction
containing
,MAIN
和{{1}之间不应该有其他footnote
如果条件匹配,我需要画一条线。
我正在使用以下xpath来匹配条件。但这并没有像预期的那样发挥作用。
current footnote
请让我知道我该怎么做。
由于
答案 0 :(得分:1)
在test
中尝试以下表达式(格式化以便于阅读)*:
following-sibling::processing-instruction('xpp')
[contains(.,'MAIN')]
[1]
[preceding-sibling::footnote[1]/@label=current()/@label]
您可以在此处使用更具体的轴following-sibling
,因为所有重要元素都位于同一父元素中的同一级别。然后,原始./@label
表达式末尾的错误为test
。上下文有processing-instruction('xpp')/text()
,它没有label
属性。您需要使用current()
将上下文切换为当前匹配的footnote
:
<!--Here I need the change-->
<xsl:if test="following-sibling::processing-instruction('xpp')[contains(.,'MAIN')][1][preceding-sibling::footnote[1]/@label=current()/@label]">
<xsl:text>-------------------------</xsl:text>
</xsl:if>
测试代码:http://xsltransform.net/pPzifpU
*)您也可以直接在最后一个谓词中比较元素,例如:
[preceding-sibling::footnote[1]=current()]