解析XML时出现以下异常

org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.


我正在发送的SOAp请求:

<soap:Envelope>
   <soap:Header/>
   <soap:Body>
      <ver:ReceiveOnlineBatchExternalAttachment>
         <web:username>user</web:username>
         <web:passwd>pass</web:passwd>
         <web:receiversReference>1232323</web:receiversReference>
         <web:sequenceNumber>1</web:sequenceNumber>
         <web:batch>
            <![CDATA[
              <?xml version="1.0" encoding="UTF-8"?>
              <DataBatch>
                <DataUnits>
                 <DataUnit>
                  <FormTask>
                   <ServiceCode>323015</ServiceCode>
                   <Form>
                    <FormData>
                            <![CDATA[<melding> </melding>]]
                    </FormData>
                   </Form>
                  </FormTask>
               </DataUnit>
             </DataUnits>
           </DataBatch>
         ]]>>
        </web:batch>
      </ver:ReceiveOnlineBatchExternalAttachment>
   </soap:Body>
</soap:Envelope>


我已经多次对CDATA进行了更改,但收到相同的错误。
有人可以建议如何在此请求中处理CDATA中的CDATA吗?

尝试以下但失败:

         <![CDATA[ <elements> <![CDATA[<melding> </melding>]] <elements> ]]>>
         <![CDATA[ <elements> <![CDATA[<melding> </melding>]]> <elements> ]]>
         <![CDATA[ <elements> &lt;![CDATA[<melding> </melding>]]&gt; <elements> ]]>

最佳答案

我推测您的问题实际上是由嵌套的CDATA内容引起的。您可以尝试以下方法:

<![CDATA[
    <DataBatch>
      <DataUnits>
         <DataUnit>
          <FormTask>
           <ServiceCode>323015</ServiceCode>
           <Form>
            <FormData>
                    <![CDATA[
                        <melding> </melding>
                    ]]]]><![CDATA[>
            </FormData>
           </Form>
          </FormTask>
       </DataUnit>
     </DataUnits>
   </DataBatch>
 ]]>


这里的技巧的要点是,当解析器命中内部嵌套的<![CDATA[时,它将实际上忽略它。然后,当它达到以下目标时:

]]]]><![CDATA[>


第一个]]也将被忽略,随后的]]>将被使用,关闭外部CDATA,然后立即再次打开一个新的CDATA,该操作应一直持续到外部关闭为止。

由@fatherazrael编辑:

删除XML标签<?xml version="1.0" encoding="UTF-8"?>

参考:Nested CDATA - correctly

关于java - 如何通过带有CDATA中CDATA的SOAP UI将请求发送到Java应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47094708/

10-12 04:26