2016-07-29 2 views
0

Я пытаюсь разобрать простой XMl-файл, считанный с диска, и преобразовать его в JSON и сохранить его обратно в файл с помощью Mulesoft.Анализ XML-файла с использованием mulesoft

Это, как мул flow.xml выглядит

<file:connector name="File" autoDelete="false" streaming="true" validateConnections="true" doc:name="File"/> 
    <file:connector name="File1" outputPattern="sample1.txt" autoDelete="false" streaming="true" validateConnections="true" doc:name="File"/> 
    <flow name="datatranformerFlow"> 
     <file:inbound-endpoint path="C:\Madhu" name="sample.xml" responseTimeout="10000" doc:name="File" connector-ref="File"/> 
     <file:file-to-string-transformer mimeType="application/xml" doc:name="File to String"/> 
     <splitter expression="#[xpath3('/Names/Name')]" doc:name="Splitter"/> 
     <json:xml-to-json-transformer doc:name="XML to JSON"/> 
     <file:outbound-endpoint path="C:\Madhu\GV dev documents\WD files" connector-ref="File1" responseTimeout="10000" doc:name="File"/> 
    </flow> 

XML-файл образец, который я пытаюсь разобрать выглядит как

<Names> 
    <Name> 
     <title>bnbnbha</title> 
     <firstname>aa</firstname> 
     <lastname>aaa</lastname> 
    </Name> 
    <Name> 
     <title>bjkjkjk</title> 
     <firstname>bb</firstname> 
     <lastname>bbb</lastname> 
    </Name> 
    <Name> 
     <title>hjhjhc</title> 
     <firstname>cc</firstname> 
     <lastname>ccc</lastname> 
    </Name> 
    <Name> 
     <title>djkjkj</title> 
     <firstname>dd</firstname> 
     <lastname>ddd</lastname> 
    </Name> 
</Names> 

Когда я запустить проект мул, я получаю исключение

INFO 2016-07-29 11: 56: 25,287 [[datatranformer] .File.receiver.01] org.mule.transport.file.FileMessageReceiver: Lock получен в файле: C: \ Madhu \ sample. xml INFO 2016-07-29 11: 56: 26,193 [[datatranformer] .datatranformerFlow.stage1.02] org.mule.routing.ExpressionSplitter: выражение не оценивает тип, который можно разделить: java.lang.String ОШИБКА: «Неожиданный символ« b »(код 98) в прологе; Ожидаемый '<' at [row, col {unknown-source}]: [2,3] ' ОШИБКА 2016-07-29 11: 56: 26,272 [[datatranformer] .datatranformerFlow.stage1.02] org.mule. exception.DefaultMessagingExceptionStrategy:


Сообщение: com.ctc.wstx.exc.WstxUnexpectedCharException: Неожиданный символ 'B' (код 98) в прологе; ожидается '<' в [строка, столбец {неизвестного источника}]: [2,3] (javax.xml.transform.TransformerException) Payload: bnbnbha аа ааа

Есть ли что-то я делаю неправильно ?

ответ

0

Вы можете просто использовать # [xpath3 («/ Имена»)]

1

Если ваша цель только чтение файла XML, преобразовать его в формат JSON, и сохранить его в файл (без дальнейшей обработки), а затем удалить Файл к строке трансформатор и Разделитель контроль потока.

Таким образом, вы конфигурация стали, как это:

<flow name="datatranformerFlow"> 
    <file:inbound-endpoint path="C:\Madhu" name="sample.xml" responseTimeout="10000" doc:name="File" connector-ref="File"/> 
    <json:xml-to-json-transformer doc:name="XML to JSON"/> 
    <file:outbound-endpoint path="C:\Madhu\GV dev documents\WD files" connector-ref="File1" responseTimeout="10000" doc:name="File"/> 
</flow> 
+0

Этот один работает .. спасибо –

0

Просто удалите выражение сплиттера, как вы упомянули, вы просто хотите, чтобы преобразовать этот файл в формат CSV, пожалуйста, проверьте ниже поток:

<?xml version="1.0" encoding="UTF-8"?> 
 

 
<mule xmlns:json="http://www.mulesoft.org/schema/mule/json" 
 
\t 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" 
 
\t xmlns:spring="http://www.springframework.org/schema/beans" 
 
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xsi:schemaLocation="http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd 
 
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"> 
 
    <file:connector name="File" autoDelete="false" streaming="true" validateConnections="true" doc:name="File"/> 
 
    <file:connector name="File1" outputPattern="sample1.txt" autoDelete="false" streaming="true" validateConnections="true" doc:name="File"/> 
 
    <flow name="datatranformerFlow"> 
 
     <file:inbound-endpoint path="C:\madhu" connector-ref="File" responseTimeout="10000" doc:name="File"/> 
 
     <file:file-to-string-transformer doc:name="File to String"/> 
 
     <json:xml-to-json-transformer mimeType="application/json" doc:name="XML to JSON"/> 
 
     <logger message="payload--&gt; #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/> 
 
    <file:outbound-endpoint path="C:\Madhu\GV dev documents\WD files" connector-ref="File1" responseTimeout="10000" doc:name="File"/> 
 
    </flow> 
 
</mule>

Надеюсь, это поможет!

0

Есть много способов сделать это

  1. вы можете использовать XPath
  2. вы можете сделать это путем преобразования сообщений компонента
  3. вы можете сделать это с помощью JSON в XML-конвертер
Смежные вопросы