可以使用有效的xml正文转义'<'的字符和'>'围绕元素名称

时间:2010-02-22 22:04:34

标签: xml soap jax-ws soapui xml-validation

我的网络服务正在从第三方接收xml,如下所示:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
&lt;Foo&gt;bar&lt;/Foo&gt;
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我的jaxws web服务因解析错误而拒绝此操作。此外,如果我尝试使用soapui验证此xml,则表示仅具有元素内容类型的Body不能包含文本元素。

我的问题是,xml有效吗?或者客户端是否应该向我发送一些内容而无需转义&lt;和&gt;。

欢迎任何对xml标准或规则的引用。

2 个答案:

答案 0 :(得分:2)

嗯,这肯定是有效的XML。但是,你的问题似乎是它是否符合SOAP协议,这是一个更具限制性的问题。

在示例中,您的SOAP主体只是一个文本元素。我不是SOAP专家,但在我看到的所有SOAP示例中,正文中都有元素节点,而不仅仅是文本。 SOAP推荐(http://www.w3.org/TR/2000/NOTE-SOAP-20000508)也说

  

“身体入口由其识别   完全限定的元素名称“

确实表明要求元素而不是文本。

答案 1 :(得分:1)

或者,您可以通过将其与CDATA(字符数据)部分一起包含来转义完整字符串。 CDATA部分以九个字符的分隔符开头![CDATA [并以分隔符结束]]:

  <![CDATA["Me, Myself & <I>"]]>

看看http://xmmssc-www.star.le.ac.uk/SAS/xmmsas_20070308_1802/doc/param/node24.html