xsl:提升节点以创建url

时间:2013-06-04 18:35:44

标签: xml xslt functional-programming

考虑以下xml:

<folder>
    <name>folderA</name>
     <contents>
         <folder>
             <name>folderB</name>
             <contents>
                  <file>
                      <name>fileC</name>
                  <file>
             </contents>
         </folder>
     </contents>
</folder>

代表简单的文件结构:

folderA/
 L  folderB/
    L   fileC

在XSL中,我希望能够在file模板中生成文件的路径。因此,似乎我需要递归提升节点树以获取此文件所在的文件夹的名称。

如何填写下一个xsl模板中的???

<xsl:template match="file">
     <a href="{???}"><xsl:value-of name="name" /></a>
</xsl:template>

终于得到:

<a href="folderA/folderB/fileC">fileC</a>

1 个答案:

答案 0 :(得分:0)

这里ancestor::是你的朋友。 尝试类似:

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

    <xsl:template match="file">
        <a>
            <xsl:attribute name="href">
                <xsl:apply-templates select="ancestor::folder" />
                <xsl:value-of select="name"/>
            </xsl:attribute>
            <xsl:value-of select="name"/>
        </a>
    </xsl:template>

    <xsl:template match="folder" >
        <xsl:value-of select="name"/>
        <xsl:text>/</xsl:text>
    </xsl:template>

    <xsl:template match="/" >
        <xsl:apply-templates select="//file" />
    </xsl:template>

</xsl:stylesheet>