【问题标题】:How to get XML node name in Mule using MEL or XPATH expression如何使用 MEL 或 XPATH 表达式在 Mule 中获取 XML 节点名称
【发布时间】:2019-08-22 05:25:14
【问题描述】:

我有一个简单的要求...我有一个 xml 文件:-

<Service>
<Name>Abcd</Name>
<Age>28</Age>
</Service>

现在我的要求是使用 XPATH 或 MEL 显示节点名称... 到目前为止,我尝试了各种 XPATH 表达式,如下所示:-

<flow name="Flow1WManager" doc:name="newFlow">
   <file:inbound-endpoint responseTimeout="10000" connector-ref="File_Input" doc:name="File"  path="E:\backup\test">
       <file:filename-regex-filter pattern="aa.xml" caseSensitive="false"/>
    </file:inbound-endpoint>
<logger message="NodeName1 : #[xpath-node://Service/*[1]/node()]" level="INFO" doc:name="Logger" />
<logger message="NodeName2 : #[xpath-node://.[xpath:local-name()='Service']/*/node()]" level="INFO" doc:name="Logger" />
<logger message="NodeName3 : #[xpath-node://.[xpath:local-name()='Service']/.[xpath:local-name()]/node()]" level="INFO" doc:name="Logger" />
</flow>

但我在控制台中得到关注:-

INFO  2014-08-14 23:03:28,915 [[XPATHWithLocal-name].Flow1WManager.stage1.02] org.mule.api.processor.LoggerMessageProcessor: NodeName1 : org.dom4j.tree.DefaultText@5fffd6fd [Text: "Abcd"]
INFO  2014-08-14 23:03:28,921 [[XPATHWithLocal-name].Flow1WManager.stage1.02] org.mule.api.processor.LoggerMessageProcessor: NodeName2 : [org.dom4j.tree.DefaultText@5fffd6fd [Text: "Abcd"], org.dom4j.tree.DefaultText@1bb3db1b [Text: "28"]]
INFO  2014-08-14 23:03:28,923 [[XPATHWithLocal-name].Flow1WManager.stage1.02] org.mule.api.processor.LoggerMessageProcessor: NodeName3 : [org.dom4j.tree.DefaultText@1a1b4f86 [Text: "
"], org.dom4j.tree.DefaultDocument@1123b146 [Document: name null], org.dom4j.tree.DefaultText@157bad48 [Text: "
"], org.dom4j.tree.DefaultDocument@3e4b7374 [Document: name null], org.dom4j.tree.DefaultText@3cf5d7d2 [Text: "
"]]

我使用了local-name XPath function ..但无法获取节点名称..我错过了什么..请帮助

【问题讨论】:

标签: xml xpath mule mule-studio mule-el


【解决方案1】:

简单的 Xpath 语句

服务-#[xpath('xpath:name(/*)')] 姓名-#[xpath('xpath:name(/Service/Name)')] 年龄-#[xpath('xpath:name(/Service/Age)')]

如果您不知道节点名称 姓名-xpath('xpath:name(/Service/*[1])') 年龄-xpath('xpath:name(/Service/*[2])')

【讨论】:

    【解决方案2】:

    试试下面的代码。它正在工作。

    NAME =====>  #[xpath3('//Service/Name')]
    AGE -======> #[xpath3('//Service/Age')]
    

    【讨论】:

    • 我发布这个问题的时候,XPATH3 不在图片中,我使用的是 Mule 3.3 版......无论如何它早就解决了......谢谢
    【解决方案3】:

    XML 示例有效负载:

    <?xml version="1.0" encoding="UTF-8"?>
    <response>
        <field type="0" name="visit">TEST</field>
        <field type="0" name="latitude">1.23</field>
        <field type="0" name="longitude">1.23</field>
        <field type="0" name="comments">TEST</field>
    </response>
    

    MEL xpath3:

    #[xpath3('/response/field[@name=\'visit\']',payload, 'STRING')]
    

    试试这个

    FOR NAME:
    #[xpath3('/Service/Name',payload, 'STRING')] 
    FOR AGE:
    #[xpath3('/Service/Age',payload, 'NUMBER')] 
    

    参数 xpath3(0,1,2)

    0:XPath 表达式。

    1:输入文档。

    2:输出选项:BOOLEAN、STRING、NUMBER、NODESET、NODE 或 {} 这总是返回一个字符串列表

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多