2015-06-15 37 views
1

我正在試圖將XML文件拆分爲2個單獨的文件。它們必須在特定元素中的字符串長度上進行拆分。在字符串長度上使用xslt將XML拆分爲多個文件

我一直在試圖使用<xsl:for-each-group><xsl:result-document>元素來做到這一點,但只得到結果文件中第一個匹配的'對象'。

例如:

<?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> 

結果應該是由約翰·戴維斯,喬·沃爾特斯,莎拉Wyer和康珍書都被保存在遺產。 xml

我在正確的軌道上嗎?有沒有更好的辦法?

在此先感謝!

+1

爲什麼李弗洛斯特的書不會與喬沃爾特斯的書相同?兩者都有10個字符的「bookId」。 - 另外,你會提到多個文件:其他文件的名稱是什麼,以及它將包含哪些內容? –

+0

對不起,你是對的。 Joe Walters應該與Lee Frost在另一個文件中 - 在另一個文件中。 至於'多個'文件,在這種情況下,我只需要2個文件。 legacy.xml(bookIds長度不超過10)&current.xml(bookIds長度爲10)。 – shiny76

回答

0

我只需要2個文件。 legacy.xml(bookIds的長度不是10)& 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> 

爲 「正常」 的結果的轉換,您可以在啓動轉換時指向文件,以及al因此請創建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> 
+0

謝謝,這似乎是最簡單的解決方案。從前些天開始potame的解決方案也奏效了 - 我只是因爲結果文件而在一個錯誤的文件夾中尋找白癡! – shiny76

相關問題