使用xslt在字符串长度上将XML拆分为多个文件

时间:2015-06-15 15:28:44

标签: xml xslt xslt-2.0

我正在尝试将XML文件拆分为两个单独的文件。它们必须按特定元素中字符串的长度进行拆分。

我一直在尝试使用<xsl:for-each-group><xsl:result-document>元素来执行此操作,但只获得第一个匹配的&#39;对象&#39;在结果文件中。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <bookId>4125151</bookId>
        <author>John Davies</author>
    </book>
    <book>
        <bookId>1000257896</bookId>
    <author>Lee Frost</author>
    </book>
    <book>
        <bookId>1234569870</bookId>
        <author>Joe Walters</author>
    </book>
    <book>
        <bookId>2145789</bookId>
        <author>Sarah Wyer</author>
    </book>
    <book>
        <bookId>4085151</bookId>
        <author>Jane Cohen</author>
    </book>
</books>

XSL:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="books">
 <xsl:for-each-group select="book[string-length(bookId)!=10]" group-by="string-length(book/bookId)">

    <xsl:result-document href="file:/C:/devFiles/legacy.xml">
        <xsl:copy-of select="." />
    </xsl:result-document>

    </xsl:for-each-group>
 </xsl:template>

</xsl:stylesheet>

结果应该是John Davies,Joe Walters,Sarah Wyer和Jane Cohen的书籍都保存在 legacy.xml

我是否在正确的轨道上?还有更好的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

  

我只需要2个文件。 legacy.xml(bookIds长度不是10)&amp;   current.xml(bookIds的长度为10)。

然后我会建议你这样做:

XSLT 2.0

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/books">
    <books>
        <xsl:copy-of select="book[string-length(bookId)=10]" />
    </books>
    <xsl:result-document href="file:/C:/devFiles/legacy.xml">
        <books>
            <xsl:copy-of select="book[string-length(bookId)!=10]" />
        </books>
  </xsl:result-document>
</xsl:template>

</xsl:stylesheet>

这将返回以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book>
        <bookId>1000257896</bookId>
      <author>Lee Frost</author>
    </book>
   <book>
        <bookId>1234569870</bookId>
        <author>Joe Walters</author>
    </book>
</books>

作为转换的“正常”结果,您可以在启动转换时将其指向文件,还可以创建包含以下内容的legacy.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book>
        <bookId>4125151</bookId>
        <author>John Davies</author>
    </book>
   <book>
        <bookId>2145789</bookId>
        <author>Sarah Wyer</author>
    </book>
   <book>
        <bookId>4085151</bookId>
        <author>Jane Cohen</author>
    </book>
</books>