我正在尝试创建一个样式表,将XML转换为其他格式的XML,在此过程中,它应该创建多个XML文件,这些文件放在不同的文件夹中。我尝试使用的XML文件非常大(约50000行),我想将其自动化。我想转换的XML看起来像
XML:
<Site>
<View name="big_bang">
<Element name="Galaxy">
<Property value="milky_way"/>
<Element localizedName="Earth">
<Property localizedName="Adresse" value="1"/>
</Element>
</Element>
</View>
<View name="more_big_bang">
<Element name="Galaxy">
<Property value="orion"/>
<Element localizedName="otherEarth">
<Property localizedName="otherAdresse" value="10"/>
</Element>
</Element>
</View>
</Site>
XSLT:
<xsl:template match="Outside">
<xsl:apply-templates select="//Site"/>
</xsl:template>
`<xsl:template match="Site">
<xsl:result-document method="xml" href="{string-join(ancestor-or-self::Site/@name, '/')}/test.xml">
<GraphicsTree>
<xsl:copy-of select="."/>
</GraphicsTree>
</xsl:result-document>
</xsl:template>`
XSLT应该为每个子节点创建名称为name
或localizedName
的文件夹,因此每个文件夹中都应该有小XML和Property
的副本。但我得到了一个foder和一个XML文件,并将整个XML文件复制到其中。我还使用了SAXON处理器。
根据我之前的建议,我认为对于这个XML,您需要一种类似的方法
<xsl:template match="Site">
<xsl:apply-templates select="//Element[@name | @localizedName]"/>
</xsl:template>
<xsl:template match="Element">
<xsl:result-document href="{string-join(ancestor-or-self::Element[@name | @localizedName]/(if (@name) then @name else @localizedName), '/')}/properties.xml">
<root>
<xsl:copy-of select="Property"/>
</root>
</xsl:result-document>
</xsl:template>