XSLT生成文件夹

时间:2012-04-11 06:47:59

标签: xml xslt xpath xslt-2.0

我正在尝试将XML文件解析为较小的XML文件并将它们放入文件夹中。根据XML中的一些元素生成文件夹。

如何在XSLT中生成文件夹?我能够使用xsl:result-document生成文件,但到目前为止,我没有找到如何生成文件夹的运气。

2 个答案:

答案 0 :(得分:5)

您无需专门创建文件夹,只需提供完整的所需路径,例如folder1/doc1.xmlFor example


<?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>

答案 1 :(得分:3)

它可能依赖于实现,但如果您使用Saxon,那么<xsl:result-document href="foo/bar/baz/sample.xml"/>将创建文件夹(如果它们尚不存在)。