使用XSLT将XML分割成多个文件

前端之家收集整理的这篇文章主要介绍了使用XSLT将XML分割成多个文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在XSLT周围很困难,但是听说可以将XML文件分割成多个文件。基本上我想将所有的元素复制到第一个文件,最后一个文件,然后添加每个输出文件的单个文件内容

如果有可能,有人可以给我一些指针吗?

谢谢,

complete.xml

<rootelem>
  <elem>
    <file attr1='1'>
      <content>content file 1</content>
    </file>
    <file attr2='2'>
      <content>content file 2</content>
    </file>
    <file attr3='3'>
      <content>content file 3</content>
    </file>
  </elem>
</rootelem>

输出

complete_PART1.xml

<rootelem>
  <elem>
     <file attr1='1'>
        <content>content file 1</content>
     </file>
  </elem>
</rootelem>

complete_PART2.xml

<rootelem>
  <elem>
    <file attr2='2'>
      <content>content file 2</content>
    </file>
  </elem>
</rootelem>

complete_PART3.xml

<rootelem>
  <elem>
     <file attr3='3'>
        <content>content file 3</content>
     </file>
  </elem>
</rootelem>
回复你对@ Dimitre的回答的评论

你写了,

<xsl:template match="/">
  <xsl:for-each select="elem/file">
    <xsl:result-document method="xml" href="file_{@id}-output.xml">
      <xsl:copy-of select="."/>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>

这不符合您的XML,它的rootelem作为最外层的元素,您的评论将root表示为最外层的元素。你可能想要这样的东西:

<xsl:template match="/root">
  <xsl:for-each select="elem/file">
    <xsl:result-document method="xml" href="file_{@id}-output.xml">
      <root>
        <xsl:copy-of select="/root/@*" />
        <elem>
          <xsl:copy-of select="../@* | ." />
        </elem>
      </root>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>

您可以获得优胜者,尝试使用< xsl:copy>而不是根和elem的字面结果元素,但它似乎不值得的努力,除非他们会变化。

猜你在找的XML相关文章