【问题标题】:Mulesoft web service XML output to JSONMulesoft Web 服务 XML 输出到 JSON
【发布时间】:2016-06-12 07:05:31
【问题描述】:

我是 Mulesoft 的新手,正在努力创建一个流程,我正在使用一个将 XML 作为输出的 Web 服务,我需要在 Mule 中将 XML 转换为 JSON。

下面是我的Mule流程,

下面是 Postman Pretty 值,

<?xml version="1.0" encoding="UTF-8"?>
<GetProjectResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="namespaceName">
    <GetProjectResult>&lt;root&gt;
  &lt;header&gt;
    &lt;status&gt;
      &lt;message&gt;Success&lt;/message&gt;
    &lt;/status&gt;
  &lt;/header&gt;
  &lt;data&gt;
    &lt;Project&gt;
      &lt;ProjectId&gt;12345&lt;/ProjectId&gt;
      &lt;ProjectShortName&gt;ABCDEF&lt;/ProjectShortName&gt;
      &lt;BusinessGroupName&gt;ABCDEF GROUP&lt;/BusinessGroupName&gt;
      &lt;InstitutionShortName&gt;Country&lt;/InstitutionShortName&gt;
      &lt;CountryName&gt;Sample&lt;/CountryName&gt;
      &lt;Code&gt;Sample&lt;/Code&gt;
    &lt;/Project&gt;
  &lt;/data&gt;
&lt;/root&gt;</GetProjectResult>
</GetProjectResponse>

但我的 JSON 看起来像这样,

{
  "GetProjectResponse": {
    "@xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
    "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
    "@xmlns:xmlns": "namespaceName",
    "GetProjectResult": "<root>\n  <header>\n    <status>\n      <message>Success</message>\n    </status>\n  </header>\n  <data>\n    <Project>\n      <ProjectId>12345</ProjectId>\n      <ProjectShortName>ABCDEF</ProjectShortName>\n      <BusinessGroupName>ABCDEF GROUP</BusinessGroupName>\n      <InstitutionShortName>Country</InstitutionShortName>\n      <CountryName>Sample</CountryName>\n      <Code>Sample</Code>\n    </Project>\n  </data>\n</root>"
  }
}

我的实际 XML 是“GetProjectResult”节点内的值,有人可以告诉我如何实现这一点。

【问题讨论】:

    标签: mule


    【解决方案1】:

    选项 3:

     <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8083" basePath="test3" doc:name="HTTP Listener Configuration"/>
    
       <flow name="removeFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
        <json:xml-to-json-transformer doc:name="XML to JSON"/>
        <logger message="#[json:GetProjectResponse/GetProjectResult]" level="INFO" doc:name="Logger"/>
        <set-variable variableName="extractJsondata" value="#[json:GetProjectResponse/GetProjectResult]" mimeType="application/json" doc:name="Variable"/>
        <set-payload value="#[flowVars.extractJsondata]" doc:name="Set Payload"/>
        <echo-component doc:name="Echo"/>
      </flow>
    

    我已直接将您的 xml 作为我的邮递员的输入。能够得到上述结果。

    作为另一种方式 json-to-object-transformer,您可以提取有效负载。https://docs.mulesoft.com/mule-user-guide/v/3.7/mule-expression-language-tips(请参阅此 url 中的 JSON 处理部分)。希望这会有所帮助。

    【讨论】:

    【解决方案2】:

    3 个选项

    1.您可以使用XpathXpath3表达式(基于Mule版本)并先提取GetProjectResult,然后您可以使用xmlToJson转换器转换为Json,这将是一个更简单的选择。

    2.一旦输入到流中的xml删除名称空间然后转换为Json

    3.直接使用xmlToJson转换器(目前你正在做的),转换成JSONtoObject,并提取此链接Extract values from a json response in mule flow中提到的所需值(或)直接使用此链接中提到的Evaluatehow to access json data mule esb

    【讨论】:

    • 我已经尝试了您的选择,但没有运气。不知道我在哪里失踪。鉴于细节作为另一个答案,有一个好的格式
    【解决方案3】:

    我使用 XSLT 获取“GetProjectResult”对象,然后应用了一个内置的 XmlToJson 转换器。

    XSLT:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" />
    <xsl:template match="/">
            <xsl:value-of disable-output-escaping="yes" select="//GetProjectResult" />
    </xsl:template>
    </xsl:stylesheet>
    

    XML 流程:

        <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
        <mulexml:xslt-transformer xsl-    file="test.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"/>
        <byte-array-to-string-transformer doc:name="Byte Array to String"/>
        <json:xml-to-json-transformer doc:name="XML to JSON"/>
        <logger message="#[payload:java.lang.String]" level="INFO"  doc:name="Logger"/>
    

    应用上述流程后的Json响应如下:

    {
    "root" : {
        "header" : {
            "status" : {
                "message" : "Success"
            }
        },
        "data" : {
            "Project" : {
                "ProjectId" : "12345",
                "ProjectShortName" : "ABCDEF",
                "BusinessGroupName" : "ABCDEF GROUP",
                "InstitutionShortName" : "Country",
                "CountryName" : "Sample",
                "Code" : "Sample"
            }
        }
    }
    

    }

    这是你想要的 json 吗?

    【讨论】:

    • 没错,这是我想要的 JSON。非常感谢。你能告诉我,` w3.org/1999/XSL/Transform"> `
    • 你能展示一下配置 XML 部分吗,我想看看你是如何应用这个 XSL 部分的
    • 非常感谢您的解决方案。出于某种原因,虽然 DOM-XML 给了我 XML 输出,但 XSLT 没有给我输出。因此尝试了明星的选择并奏效了。无论如何,非常感谢您的宝贵时间
    • 你能否检查一下我的花药问题stackoverflow.com/q/37801082/2665819
    【解决方案4】:

    这是因为你的 XML 是字符串格式,所以首先转换它或使用 XML 文件。然后您可以通过转换消息组件轻松转换。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2012-02-08
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      相关资源
      最近更新 更多