0

考虑以下 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>
4

1 回答 1

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>
于 2013-06-04T18:47:24.807 回答