我想使用XSLT将一个XML文件拆分成多个小文件。我读到这可以使用exsl:document
。除了一个小问题之外,我已经设法让它工作 - 我似乎只能输出一个文件。这是我的XML:
<People>
<Person>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Person>
<Person>
<FirstName>Jack</FirstName>
<LastName>White</LastName>
</Person>
<Person>
<FirstName>Mark</FirstName>
<LastName>Wall</LastName>
</Person>
<Person>
<FirstName>John</FirstName>
<LastName>Ding</LastName>
</Person>
<Person>
<FirstName>Cyrus</FirstName>
<LastName>Ding</LastName>
</Person>
<Person>
<FirstName>Megan</FirstName>
<LastName>Boing</LastName>
</Person>
</People>
这是我的XSLT:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"
exclude-result-prefixes="exsl"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="People/Person">
<exsl:document href="{//FirstName}_{//LastName}.xml">
<People>
<xsl:copy-of select="."/>
</People>
</exsl:document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
使用xsltproc data.xsl data.xml
执行此操作只会生成一个名为John_Doe.xml
的文件。我找不到任何其他文件。
如何将所有Person
拆分为单独的文件?
答案 0 :(得分:1)
更改
<xsl:template match="/">
<xsl:for-each select="People/Person">
<exsl:document href="{//FirstName}_{//LastName}.xml">
<People>
<xsl:copy-of select="."/>
</People>
</exsl:document>
</xsl:for-each>
</xsl:template>
到
<xsl:template match="/">
<xsl:for-each select="People/Person">
<exsl:document href="{FirstName}_{LastName}.xml">
<People>
<xsl:copy-of select="."/>
</People>
</exsl:document>
</xsl:for-each>
</xsl:template>