2016-04-18 9 views
0

Ich bin ein bisschen neu zum Aufteilen von XMLs, können Sie mir helfen, mehrere XMLs aus einer Eingabe zu erstellen? Muss ich Splitter verwenden? XSLT? kann ich auch die Nachrichten-ID in der XML-Datei einfügen?Wie teilen Sie XMLs in Mule? Splitter?

Eingang

<?xml version="1.0"?> 
<StockMovementDataRequest xmlns:p1="urn:ams.com.au:dynamo:3pl:am:SAP_AM_I_005:StockMovement" xmlns:a="http://www.edi.com.au/EnterpriseService"> 
    <Header> 
     <From>Warehouse</From> 
     <To>Location</To> 
     <Unique_ID>idm1468201212</Unique_ID> 
     <DateTimeStamp>2016-04-13T11:55:30.263+10:00</DateTimeStamp> 
    </Header> 
    <StockMovementData> 
     <Serialised_Material>YES</Serialised_Material> 
     <DateTime>2016-04-13T11:55:30.263+10:00</DateTime> 
     <From_Location>30-80</From_Location> 
     <To_Location>client</To_Location> 
     <Material>7CAGL3G00</Material> 
     <Serial>700030011</Serial> 
     <Quantity>100</Quantity> 
    </StockMovementData> 
    <StockMovementData> 
     <Serialised_Material>YES</Serialised_Material> 
     <DateTime>2016-04-13T11:55:30.263+10:00</DateTime> 
     <From_Location>30-80</From_Location> 
     <To_Location>client</To_Location> 
     <Material>7CAGL3G00</Material> 
     <Serial>700029911</Serial> 
     <Quantity>100</Quantity> 
    </StockMovementData> 
</StockMovementDataRequest> 

Ausgang

<?xml version="1.0"?> 
<StockMovementDataRequest xmlns:p1="urn:ams.com.au:dynamo:3pl:am:SAP_AM_I_005:StockMovement" 
    xmlns:a="http://www.edi.com.au/EnterpriseService/"> 
    <Header> 
     <From>warehouse</From> 
     <To>client</To> 
     <Unique_ID>idm1467386212</Unique_ID> 
     <DateTimeStamp>2016-04-13T11:55:30.263+10:00</DateTimeStamp> 
    </Header> 
    <StockMovementData> 
     <Serialised_Material>YES</Serialised_Material> 
     <DateTime>2016-04-13T11:55:30.263+10:00</DateTime> 
     <From_Location>30-80</From_Location> 
     <To_Location>client</To_Location> 
     <Material>7CAGL3G00</Material> 
     <Serial>700030011</Serial> 
     <Quantity>100</Quantity> 
    </StockMovementData> 
</StockMovementDataRequest> 

und

<?xml version="1.0"?> 
<StockMovementDataRequest xmlns:p1="urn:ams.com.au:dynamo:3pl:am:SAP_AM_I_005:StockMovement" 
    xmlns:a="http://www.edi.com.au/EnterpriseService/"> 
    <Header> 
     <From>warehouse</From> 
     <To>client</To> 
     <Unique_ID>idm1467386212</Unique_ID> 
     <DateTimeStamp>2016-04-13T11:55:30.263+10:00</DateTimeStamp> 
    </Header> 
    <StockMovementData> 
     <Serialised_Material>YES</Serialised_Material> 
     <DateTime>2016-04-13T11:55:30.263+10:00</DateTime> 
     <From_Location>30-80</From_Location> 
     <To_Location>client</To_Location> 
     <Material>7CAGL3G00</Material> 
     <Serial>700029911</Serial> 
     <Quantity>100</Quantity> 
    </StockMovementData> 
</StockMovementDataRequest> 

Irgendwelche Gedanken?

+1

ist 'StockMovementDataRequest' Ihr Root-Knoten? Wenn nicht, ist Ihr XML fehlerhaft. –

+0

Hi Joel, danke, dass ich es beim Kopieren und Einfügen übersehen habe. –

Antwort

0

Verwenden Mule Splitter aufzuspalten xml

<splitter expression="#[xpath3('//StockMovementDataRequest/StockMovementData',payload,'NODESET')]" doc:name="Splitter"/>   
    <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/> 

die Nutzlast nach dem Splitter zu aggregieren, verwenden aggregator

<collection-aggregator doc:name="Collection Aggregator"/> 

mehr Dokumentation Siehe hier https://docs.mulesoft.com/mule-user-guide/v/3.7/splitter-flow-control-reference

1

Wenn Ihr Prozessor XSLT-2.0 unterstützt, können Sie den Code unten versuchen:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

    <xsl:strip-space elements="*"/> 
    <xsl:output indent="yes"/> 

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

    <xsl:template match="/"> 
     <xsl:for-each select="StockMovementDataRequest/StockMovementData"> 
      <xsl:result-document href="{concat('output', position(), '.xml')}"> 
       <StockMovementDataRequest xmlns:p1="urn:ams.com.au:dynamo:3pl:am:SAP_AM_I_005:StockMovement" xmlns:a="http://www.edi.com.au/EnterpriseService"> 
        <xsl:apply-templates select="preceding-sibling::Header"/> 
        <xsl:apply-templates select="."/> 
       </StockMovementDataRequest> 
      </xsl:result-document> 
     </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

es gibt, output1.xml und output2.xml auf Ihrer Eingabe basiert.