我有一个XSLT,用于根据输入文档生成一系列输出文档。
基本上,我有两个目录in
和out
,并且我使用XSLT根据目录out
中具有相同名称的文件在目录in
中创建文件。
我的基本XML(filelist.xml)包含文档列表:
<file name="1 old.xml"><...></file>
<file name="2 new.xml"><...></file>
目录in
中的文件包含<source>
和<target>
节点。
和我的XSLT:
<xsl:template match="file">
<xsl:result-document method="xml" href="{outputfolder\@name}">
<xsl:when test="unparsed-text-available(inputfolder\@name)">
<xsl:apply-templates select="document(inputfolder\@name)"/>
</xsl:when>
</xsl:template>
现在,我要根据文件名处理in
中的文件:
这是我修改节点的方式:
<xsl:template match="target">
<xsl:choose>
<xsl:when test="...">
<xsl:copy>
<xsl:copy-of select="ancestor::*/source"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:template>
在此模板内,当前节点是<target>
内的1 old.xml
。在此位置,如何运行节点测试,以查看创建输出文档的filelist.xml
中的节点?
答案 0 :(得分:1)
最简单的方法是将全局变量绑定到主体输入文档:
<xsl:variable name="filelist" select="/" as="document-node(element(file))"/>
,然后您可以在样式表中的任何位置将其称为$filelist
。
as
属性有助于使读者理解清楚,并自动检查样式表是否已应用于正确的源文档。
顺便说一句,您通过使用包含空格的字符串作为URI来玩火(而且您似乎还在需要使用正斜杠的地方键入反斜杠)。