XSLT围绕子节点值包装节点文本

时间:2011-04-16 18:10:55

标签: xslt wrapping

所以我有一个包含

的xml文件
...
<chapter>
    <para>This line has a quote <quote id="one"/>. Here is some more text.</para>
    <para>This also has a quote <quote id="two"/>. Here is some more text.</para>
</chapter>
<references>
    <source id="one">
        <author>Author 1</author>
        <title>Title 1</title>
        <year>2001</year>
    </source>
     <source id="two">
        <author>Author 2</author>
        <title>Title 2</title>
        <year>2002</year>
    </source>
</references>
...

我想输出一个xhtml

...
<p>This line has a quote <a href="#one>[1]</a>. Here is some more text.</p>
<p>This also has a quote <a href="#two>[2]</a>. Here is some more text.</p>
<h3>References</h3>
<ol>
    <li><a name="one">Author 1, Title 1, 2001</a></li>
    <li><a name="two">Author 2, Title 2, 2002</a></li>
</ol>
...

所以我想要的是文本中的引用,其中包含引用列表中项目的链接。 我也希望参考文献以文字形式出现。

1 个答案:

答案 0 :(得分:4)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" />

    <xsl:template match="para">
        <p><xsl:apply-templates/></p>
    </xsl:template>

    <xsl:template match="quote">
        <a href="#{@id}">
        <xsl:text>[</xsl:text>
        <xsl:number count="quote" level="any" />
        <xsl:text>]</xsl:text>
        </a>
    </xsl:template>

    <xsl:template match="references">
        <h3>References</h3>
        <ol>
            <xsl:apply-templates/>
        </ol>
    </xsl:template>

    <xsl:template match="source">
        <li>
            <a name="{@id}">
                <xsl:apply-templates/>
            </a>
        </li>
    </xsl:template>

    <xsl:template match="author|title">
        <xsl:value-of select="."/>
        <xsl:text>, </xsl:text>
    </xsl:template>

    <xsl:template match="year">
        <xsl:value-of select="."/>
    </xsl:template>

</xsl:stylesheet>