我正在尝试创建一个样式表来将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处理器。
答案 0 :(得分:2)
根据我之前的建议,我认为对于这种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>