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