我正在写一个XSL,下面是我的要求。
superscript
时,搜索整个XML并查看具有属性覆盖的listitem,而hte值应该等于superscript
。下面是我的XML
<?xml version="1.0" encoding="UTF-8"?>
<division>
<superscript>1</superscript>
<page num="1"/>
<note role="para-footnote">
<orderedlist>
<listitem override="1">
<para>Hi</para>
</listitem>
</orderedlist>
</note>
</division>
这是我的XSL
<xsl:template match="superscript[name(ancestor::*[last()]) = 'division']">
<xsl:apply-templates select="//listitem[@override=.]/preceding::page[1]" mode="first"/>
<xsl:variable name="cnt" select="count(preceding::superscript)+1"/>
<xsl:variable name="varHeaderNote" select='concat("f",$cnt)'/>
<xsl:variable name="varFootNote" select='concat("#ftn.",$cnt)'/>
<sup>
<a name="{$varHeaderNote}" href="{$varFootNote}" class="tr_ftn">
<xsl:value-of select="."/>
</a>
</sup>
</xsl:template>
<xsl:template match="page" mode="first">
<xsl:variable name="pb" select="./@num"/>
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="$pb"/>
<xsl:text>'</xsl:text>
<xsl:text>?</xsl:text>
</xsl:processing-instruction>
<a name="{concat('pg_',$pb)}"/>
</xsl:template>
我当前的O / p
<!DOCTYPE html
PUBLIC "XSLT-compat">
<hmtl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New Version!</title>
</head>
<sup><a name="f1" href="#ftn.1" class="tr_ftn">1</a></sup>
<page num="1"></page>
<note role="para-footnote">
<orderedlist>
<listitem override="1">
<para>Hi</para>
</listitem>
</orderedlist>
</note>
</hmtl>
预期的O / p:
<!DOCTYPE html
PUBLIC "XSLT-compat">
<hmtl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New Version!</title>
</head>
<?pb label='1'?>
<sup><a name="f1" href="#ftn.1" class="tr_ftn">1</a></sup>
<page num="1"></page>
<note role="para-footnote">
<orderedlist>
<listitem override="1">
<para>Hi</para>
</listitem>
</orderedlist>
</note>
</hmtl>
这是一个工作小提琴。 http://xsltransform.net/ejivdGR
请让我知道我哪里出错了,我该如何解决这个问题。
由于
答案 0 :(得分:1)
比较谓词中的@override = current()
,请参阅http://xsltransform.net/ejivdGR/1。
或者更好地定义密钥<xsl:key name="li" match="listitem" use="@override"/>
,然后您可以使用key('li', .)
查找listitem
引用的superscript
。