我正在尝试将 XML 文件解析为较小的 XML 文件并将它们放入文件夹中。这些文件夹是根据 XML 中的一些元素生成的。
如何在 XSLT 中生成文件夹?我能够使用 xsl:result-document 生成文件,但到目前为止我还没有找到如何生成文件夹的运气。
您不需要专门创建文件夹,只需提供完整的所需路径,例如folder1/doc1.xml
. 例如:
<?xml version="1.0" encoding="UTF-8"?>
<tests>
<testrun run="test1">
<test name="foo" pass="true" />
<test name="bar" pass="true" />
<test name="baz" pass="true" />
</testrun>
<testrun run="test2">
<test name="foo" pass="true" />
<test name="bar" pass="false" />
<test name="baz" pass="false" />
</testrun>
<testrun run="test3">
<test name="foo" pass="false" />
<test name="bar" pass="true" />
<test name="baz" pass="false" />
</testrun>
</tests>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="text"/>
<xsl:output method="html" indent="yes" name="html"/>
<xsl:template match="/">
<xsl:for-each select="//testrun">
<xsl:variable name="filename"
select="concat('output1/',@run,'.html')" />
<xsl:value-of select="$filename" /> <!-- Creating -->
<xsl:result-document href="{$filename}" format="html">
<html><body>
<xsl:value-of select="@run"/>
</body></html>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
它可能依赖于实现,但是如果您使用 Saxon,那么<xsl:result-document href="foo/bar/baz/sample.xml"/>
如果文件夹不存在,则将创建它们。