2016-04-23 56 views
0

我們有小數據遷移作業。在那裏,我們輸出到XML,然後使用XSLT2.0應用轉換。XSLT Transformer ThrowsException:無法將多個結果文檔寫入同一個URI

方案

但是,當我們增加一個子元素到XML的OrderHeader。 即OrderLineID。然後,它不會寫入預期訂單的多個文件。

例如: 它應該在XSLT之後寫入多個文件。

SORTOIDOC_ORD-411323

SORTOIDOC_ORD-411324
SORTOIDOC_ORD-411325

它投擲以下錯誤:

Error at xsl:result-document on line 15 of so4.xsl: 
XTDE1490: Cannot write more than one result document to the same URI: 
file:/C:/Data/dir/SORTOIDOC_ORD-411324.xml 
Exception in component tXSLT_1 
SystemID: file:/C:/Software/TOS_BD-20150908_1633-V6.0.1/workspace/xmlout/so4.xsl; Line#: 15; Column#: -1 
net.sf.saxon.trans.XPathException: Cannot write more than one result document to the same URI: file:/C:/Data/dir/SORTOIDOC_ORD-411324.xml 

輸出XML是:

<?xml version="1.0" encoding="Windows-1252"?> 
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" 
      xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD"> 
    <Orders> 
     <OrderHeader> 
     <CustomerPoNumber>Manual Order 3</CustomerPoNumber> 
     <SalesForceOrderNumber>ORD-411325</SalesForceOrderNumber> 
     <OrderLineID>OR-1561180</OrderLineID> 
     </OrderHeader> 
     <OrderDetails> 
     <StockLine> 
      <CustomerPoLine>9999</CustomerPoLine> 
      <LineCancelCode/> 
      <StockCode>ACSH-NHH-12OZ-12</StockCode> 
      <StockDescription>NHH ABYSS CHIA SHAMPOO 12OZ CS</StockDescription> 
      <Warehouse/> 
      <CustomersPartNumber/> 
     </StockLine> 
     </OrderDetails> 
    </Orders> 
</SalesOrders> 

XSLT 2。 O IS看起來像:

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

<xsl:template match="@xsi:nil[.='true']" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy copy-namespaces="no"> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:for-each-group select="SalesOrders/Orders" group-by="OrderHeader"> 
     <xsl:result-document href="SORTOIDOC_{OrderHeader/SalesForceOrderNumber}.xml"> 
      <SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD"> 
       <xsl:apply-templates select="current-group()"/> 
      </SalesOrders> 
     </xsl:result-document> 
    </xsl:for-each-group> 
</xsl:template> 

爲什麼:

只是添加元素插入XML輸出模式導致編寫XML及其行項目的多個文件的問題。在添加此(OrderLineID)之前,整體方案按預期工作。

對此的任何幫助將是非常讚賞?

在此先感謝!

+0

所以要組嗎? '將對具有各種子元素的OrderHeader元素的字符串值進行分組,該元素至少聽起來奇怪或可能根據需要產生更多的組。 –

+0

我想要導致更多的羣組。 – NEO

+0

請考慮發佈一個小而完整的輸入XML,以便獲得您顯示的錯誤。如果你想讓結果文檔在每個文件名中都有'OrderHeader/SalesForceOrderNumber',你確定你不想在這個值上分組嗎? ''? –

回答

1

聽起來好像要組上OrderHeader/SalesForceOrderNumber而不是OrderHeader所以你可以改變你想要哪一個元素的模板

<xsl:template match="/"> 
    <xsl:for-each-group select="SalesOrders/Orders" group-by="OrderHeader/SalesForceOrderNumber"> 
     <xsl:result-document href="SORTOIDOC_{current-grouping-key()}.xml"> 
      <SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD"> 
       <xsl:apply-templates select="current-group()"/> 
      </SalesOrders> 
     </xsl:result-document> 
    </xsl:for-each-group> 
</xsl:template> 
相關問題