Mule ESB:当xml元素中包含尖括号时,DOM-to-XML解析器会出现xml解析器错误

时间:2014-07-18 13:57:45

标签: xml dom xml-parsing mule mule-component

我有一个输入xml,如:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sendRequest">
   <soapenv:Header/>
     <soapenv:Body>
        <urn:Message>
          <urn:id> 12345 </urn:id>
          <urn:name> srinath </urn:name>
          <urn:body> >Hello< </urn:body>
        </urn:Message>
   </soapenv:Body>
</soapenv:Envelope>

Mule ESB DOM-to-XMl转换器在遇到'&gt;'时会出错和'&lt;'在标签中。我怎么逃避这个?输入&amp; lt等不是一种选择,因为最终用户不会被人知道。

抛出的错误是:     消息:com.ctc.wstx.exc.WstxUnexpectedCharException:意外的字符'&lt;' (代码60)在'&lt;'之后的内容中(格式错误的开始元素?)。     at [row,col {unknown-source}]:[9,26](javax.xml.transform.TransformerException)     代码:MULE_ERROR - 2

任何解决方法都有帮助!

2 个答案:

答案 0 :(得分:3)

当然可以。这就是XML解析器的用途。如果你给他们的东西不是格式良好的XML,他们会抱怨。

XML是无情的。不要以为你可以创建一些看起来大致像XML的东西,有人会理清这些混乱。它就像一种编程语言:如果你不遵循语法,就不会编译。

你说“输入&amp; lt等不是一种选择,因为最终用户不会被人知道。”好吧,如果您无法培训最终用户生成有效的XML,那么您不应该要求他们这样做。你应该给他们一个隐藏细节的XML编辑器(例如OXygen Author),或者你应该使用更简单,更宽容的格式,如Markdown。

答案 1 :(得分:1)

是的,你可以通过两种方式做到: -

  • 使用&lt;Hello&gt;
  • 或使用cdata: - <![CDATA[ >Hello<]]>

所以你的输入xml将是: -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sendRequest">
   <soapenv:Header/>
     <soapenv:Body>
        <urn:Message>
          <urn:id> 12345 </urn:id>
          <urn:name> srinath </urn:name>
          <urn:body> &lt;Hello&gt; </urn:body>
  <!-- or use this <urn:body> <![CDATA[ >Hello<]]> </urn:body> -->
        </urn:Message>
   </soapenv:Body>
</soapenv:Envelope>