输入XML文件:
<ce:index-entry id="ie0006">
<ce:index-heading>Acceptance test</ce:index-heading>
<ce:intra-ref id="ia0011" xlink:href="pii:B978-0-12-801507-0.00017-1#st0040">452–455</ce:intra-ref>
<ce:intra-ref id="ia0012" xlink:href="pii:B978-0-12-801507-0.00017-1#sp0020">453<ce:italic>f</ce:italic></ce:intra-ref>
<ce:intra-ref id="ia0013" xlink:href="pii:B978-0-12-801507-0.00017-1#sp0025">455<ce:italic>f</ce:italic></ce:intra-ref>
<ce:intra-ref id="ia0014" xlink:href="pii:B978-0-12-801507-0.00017-1#st0055">457–458</ce:intra-ref>
</ce:index-entry>
...
输出文件:
\item Acceptance test\pid{idxB978-0-12-801507-0.00017-1.st0040<tab>00017}
\pid{idxB978-0-12-801507-0.00017-1.sp0020<tab>00017}
\pid{idxB978-0-12-801507-0.00017-1.sp0025<tab>00017}
\pid{idxB978-0-12-801507-0.00017-1.st0055<tab>00017},
\hyperpage{452-455}, \hyperpage{453}, \hyperpage{455}, \hyperpage{457-458}
尝试更新:
<xsl:template match="ce:index-sec/ce:index-entry">
<xsl:text disable-output-escaping="yes"> \item </xsl:text>
<xsl:apply-templates select="ce:index-heading"/>
更新自:
<xsl:for-each select="ce:intra-ref">
<xsl:text>\pid{idx</xsl:text><xsl:value-of select="@xlink:href"/><xsl:text>}</xsl:text>
<xsl:if test="position()=last()">
<xsl:text disable-output-escaping="yes">, </xsl:text>
</xsl:if>
</xsl:for-each>
更新至:
<xsl:call-template name="do-entries"/>
</xsl:template>
现在OUTPUT似乎是:
\item Acceptance test\pid{idxpii:B978-0-12-801507-0.00017-1#st0040}
\pid{idxpii:B978-0-12-801507-0.00017-1#sp0020}
\pid{idxpii:B978-0-12-801507-0.00017-1#sp0025}
\pid{idxpii:B978-0-12-801507-0.00017-1#st0055}, 452–455, 453$f$, 455$f$, 457–458
我需要将值 pii:B978-0-12-801507-0.00017-1#st0040 更改为 idxB978-0-12-801507-0.00017-1.st0040&lt; tab&gt ; 00017
任何人都可以帮我这个吗?
答案 0 :(得分:0)
这将按照您的要求进行
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ce="http:/example.com/ce"
xmlns:xlink="http:/example.com/xlink"
version="1.0">
<xsl:template match="*">
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="ce:index-entry">
<xsl:text disable-output-escaping="yes"> \item </xsl:text>
<xsl:apply-templates select="ce:index-heading"/>
<xsl:apply-templates select="ce:intra-ref"/>
<xsl:apply-templates select="ce:intra-ref">
<xsl:with-param name="hyperpage" select="1" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="ce:index-heading">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="ce:intra-ref">
<xsl:param name="hyperpage" select="0" />
<xsl:choose>
<xsl:when test="$hyperpage = 0">
<xsl:variable name="pid" select="concat('idx', substring-after(@xlink:href, ':'))" />
<xsl:variable name="pre" select="substring-before($pid, '#')" />
<xsl:variable name="post" select="substring-after($pid, '#')" />
<xsl:variable name="f5">
<xsl:call-template name="field-n">
<xsl:with-param name="text" select="$pre"/>
<xsl:with-param name="n" select="5"/>
</xsl:call-template>
</xsl:variable>
<xsl:text>\pid{</xsl:text>
<xsl:value-of select="concat($pre, '.', $post)" />
<xsl:text>	</xsl:text>
<xsl:value-of select="substring-after($f5, '.')"/>
<xsl:text>}
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('\hyperpage{', child::text(), '}')" />
<xsl:if test="following-sibling::ce:intra-ref">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text/text()" name="field-n">
<xsl:param name="text"/>
<xsl:param name="n"/>
<xsl:choose>
<xsl:when test="$n = 1">
<xsl:value-of select="substring-before($text, '-')"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="field-n">
<xsl:with-param name="text" select="substring-after($text, '-')"/>
<xsl:with-param name="n" select="$n - 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="utf-8"?>
\item Acceptance test\pid{idxB978-0-12-801507-0.00017-1.st0040 00017}
\pid{idxB978-0-12-801507-0.00017-1.sp0020 00017}
\pid{idxB978-0-12-801507-0.00017-1.sp0025 00017}
\pid{idxB978-0-12-801507-0.00017-1.st0055 00017}
\hyperpage{452–455}, \hyperpage{453}, \hyperpage{455}, \hyperpage{457–458}