无法在XSLT中使用exsl:document拆分文档

时间:2012-10-24 08:39:17

标签: xml xslt xslt-1.0 exslt

我想使用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拆分为单独的文件?

1 个答案:

答案 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>