0

我注意到,如果我将解码的 XML 发送到端点,它会因错误的请求错误而失败,但如果我将请求包装在 CDATA 中或对字符进行编码,它运行良好,所以我的两个问题是:

为什么我需要使用 CDATA 或对字符进行编码?

Web 服务是什么让我不得不这样做?

在 CDATA 中包装消息和对字符进行编码有什么区别?

如果解析器忽略 CDATA,这是否意味着您尝试发送的消息不会被处理?

我的 web 服务有一个名为 Process 的 web 方法,但是尝试发送的消息是 MessageB,所以我需要将 MessageB 的内容包装在 CDATA 中,因为 XML Parser 不会理解它吗?

如果我的 web 服务包含一个名为 MessageB 的 web 方法,是否仍需要将其包装在 CDATA 中或转义?我的情况是我没有 Web 方法 MessageB,而是一个名为 Process 的东西,它通过 switch 语句侦听 MessageB 请求。我在想是因为我没有将 MessageB 定义为 web 方法,这就是为什么我必须将它包装在 CDATA 中或转义它的原因,但我相信我的想法是错误的?

4

4 回答 4

1

&喜欢和<不允许出现在 XML 中的字符。

XML 标准要求它们要么使用 XML 实体进行转义,要么包装在<![CDATA[块中,这告诉 XML 解析器将整个块视为纯文本。

您应该使用一个 XML 库来为您解决这个问题;您永远不应该手动构建 XML。

于 2012-05-24T13:30:06.597 回答
1

如果您不对数据进行包装或编码,它将成为主要 XML 文档的一部分。当 Web 服务尝试解析文档时,它会找到无法映射到预期内容的元素,并将其吐出。

这不是特定于 Web 服务的,而是适用于任何您想在 XML 文档中使用 XML 代码作为值的时候。

使用 CDATA 和编码字符之间几乎没有实际区别。这只是在 XML 文档的值中嵌入特殊字符的两种不同方式。

于 2012-05-24T13:32:55.560 回答
1

某些字符在 XML 中具有特殊含义。例如,<表示“标签开始”和&“字符引用开始”。

CDATA 标记表示某些内容是纯文本而不是标记,因此<表示“小于号”和“与号&”。

于 2012-05-24T13:33:15.943 回答
0

如果您将消息发送<a><b/></a>给某人,则与 message 不同<a><[CDATA[<b/>]]></a>。两者都没有对错,但其中一个可能是接收者所期望的,而另一个则不是。由 XML 的使用者决定它理解什么样的消息。Web 服务本身并没有说任何东西都必须在 CDATA 中,只是这个特定的 Web 服务似乎是这样设计的。

于 2012-05-24T15:50:39.380 回答