我有这个XML文件:
<phone>
<brand>LG</brand>
<price>10</price>
<screenSize>8</screenSize>
</phone>
如何通过文件连接器转换收到的XML文件以用作#[payload]?
答案 0 :(得分:4)
文件连接器 无法转换有效负载。
它只是从文件中获取有效负载并将其发送到流程中
您需要做的是从XML中提取元素值以执行数据库访问,例如插入,更新,选择等。<登记/>
要提取元素值,您需要在答案中使用@JoostD已经提到的 XPATH3
参考: - https://docs.mulesoft.com/mule-user-guide/v/3.7/xpath
通过简单示例扩展@JoostD回答更清楚,如下所述: -
在这里,您从 XML 文件中提取值并插入到数据库表中: -
<file:connector name="File_Input" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<db:generic-config name="Generic_Database_Configuration" doc:name="Generic Database Configuration"/>
<flow name="testxmlFlow1" >
<file:inbound-endpoint path="C:\Users\u450146\Downloads" responseTimeout="10000" doc:name="File" connector-ref="File_Input">
<file:filename-regex-filter pattern="Test.xml" caseSensitive="false"/>
</file:inbound-endpoint>
<byte-array-to-string-transformer doc:name="Byte-Array-to-String" />
<splitter expression="#[xpath3('/phone', payload, 'NODESET')]" doc:name="Splitter" />
<logger message="brand :- #[xpath3('brand')] price:- #[xpath3('price')] screenSize:- #[xpath3('screenSize')]" level="INFO" doc:name="Logger"/>
<!-- Your Database code here -->
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[INSERT INTO table1(brand,price,screenSize)VALUES (#[xpath3('brand')],#[xpath3('price')],#[xpath3('screenSize')])]]></db:parameterized-query>
</db:insert>
</flow >
现在您可以看到,文件中的文件入站选择了有效负载,然后变换器转换成为字符串,然后 Splitter 用于拆分值: -
<splitter expression="#[xpath3('/phone', payload, 'NODESET')]" doc:name="Splitter" />
现在,您可以使用 XPATH3 直接将XML元素值插入数据库,并使用以下SQL查询: -
INSERT INTO table1(brand,price,screenSize)VALUES (#[xpath3('brand')],#[xpath3('price')],#[xpath3('screenSize')])
希望获得此帮助,您可以使用提取的数据执行其他 SQL查询,如上所示:)
答案 1 :(得分:0)
使用File to String变换器。
之后,您可以使用Xpath从XML元素中获取值。
https://docs.mulesoft.com/mule-user-guide/v/3.7/xpath#sts=XPath
例如:#[xpath('/ phone / brand')]