У меня есть один XML-файл, как показано ниже.

<?xml version='1.0' encoding='UTF-8'?>
<machineDetail>
  <machineData>
    <machineNumber>00000001</machineNumber>
    <concessionUnitType>NONE</concessionUnitType>
    <machineType>SCHAERER</machineType>
    <customerNumber>69990005</customerNumber>
    <equipmentLocation>REM</equipmentLocation>
    <installedDate>2013-08-01T00:00:00.000+0000</installedDate>
  </machineData>
  <machineData>
    <machineNumber>00001024</machineNumber>
    <concessionUnitType>NONE</concessionUnitType>
    <machineType>IBS4</machineType>
    <customerNumber>69990005</customerNumber>
    <equipmentLocation>1024</equipmentLocation>
    <installedDate>2011-09-29T00:00:00.000+0000</installedDate>
  </machineData>
</machineDetail>

Теперь мне нужно разделить на 2 xmls с такими данными, как

< Сильный > 1.xml

<?xml version='1.0' encoding='UTF-8'?>
    <machineDetail>
      <machineData>
        <machineNumber>00000001</machineNumber>
        <concessionUnitType>NONE</concessionUnitType>
        <machineType>SCHAERER</machineType>
        <customerNumber>69990005</customerNumber>
        <equipmentLocation>REM</equipmentLocation>
        <installedDate>2013-08-01T00:00:00.000+0000</installedDate>
      </machineData>
</machineDetail>

< Сильный > 2.xml

<?xml version='1.0' encoding='UTF-8'?>
  <machineDetail>
    <machineData>
        <machineNumber>00001024</machineNumber>
        <concessionUnitType>NONE</concessionUnitType>
        <machineType>IBS4</machineType>
        <customerNumber>69990005</customerNumber>
        <equipmentLocation>1024</equipmentLocation>
        <installedDate>2011-09-29T00:00:00.000+0000</installedDate>
      </machineData>
    </machineDetail>

Это должно быть выполнено в Mule. Пожалуйста, предложите xslt в этом случае. Я новичок в Муле.

0
Mule_Agent 21 Окт 2015 в 13:07

2 ответа

Лучший ответ

Следующий поток должен сделать то, о чем вы просили. При необходимости вам может потребоваться очистить пространства имен.

<mule xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml"
xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">

 <mulexml:xslt-transformer name="xslt">
    <mulexml:xslt-text>
        <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="">
            <xsl:output method="xml"/>
            <xsl:template match="/">
            <machineDetail>
                  <xsl:copy-of select="." />
            </machineDetail>
            </xsl:template>
         </xsl:stylesheet>
    </mulexml:xslt-text>

</mulexml:xslt-transformer>

</mulexml:xslt-transformer>

<file:file-to-string-transformer name="File_to_String"
    doc:name="File to String" />
<flow name="testflowsFlow">
    <file:inbound-endpoint path="C:\Temp\mule\in"
        responseTimeout="10000" doc:name="File" />
    <file:file-to-string-transformer
        doc:name="File to String" />
    <splitter expression="#[xpath('//machineData')]" doc:name="Splitter"
        enableCorrelation="ALWAYS" />
    <mulexml:dom-to-xml-transformer
        doc:name="DOM to XML" />
    <file:outbound-endpoint transformer-refs="xslt"
        path="C:\Temp\mule\out" responseTimeout="10000" doc:name="File"
        outputPattern="#[message.outboundProperties.MULE_CORRELATION_SEQUENCE].xml" />
</flow>
0
Cuball 23 Окт 2015 в 08:54

Используйте разделитель в сочетании с выражением xpath MEL: например:

<splitter expression="#[xpath('//machineDetail/machineData')]" doc:name="Splitter"/>

Это создаст два XML-документа, например:

<machineData>
        <machineNumber>00001024</machineNumber>
        <concessionUnitType>NONE</concessionUnitType>
        <machineType>IBS4</machineType>
        <customerNumber>69990005</customerNumber>
        <equipmentLocation>1024</equipmentLocation>
        <installedDate>2011-09-29T00:00:00.000+0000</installedDate>
      </machineData>

Затем, пока сообщение разделено, используйте XSLT или аналогичный, чтобы обернуть XML в Элемент machineDetail

0
Ryan Carter 21 Окт 2015 в 12:50