CDATA的解释?

时间:2012-05-24 13:28:12

标签: xml web-services cdata

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

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

使我必须执行此操作的Web服务是什么?

在CDATA中包装邮件和编码字符有什么区别?

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

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

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

4 个答案:

答案 0 :(得分:1)

&<等字符不允许以XML格式显示。

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

您应该使用最终的XML库来处理这个问题;你永远不应该手工构建XML。

答案 1 :(得分:1)

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

这不是特定于Web服务,而是在您希望将XML代码用作XML文档中的值时随时应用。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

如果您将消息<a><b/></a>发送给某人,则该消息与消息<a><[CDATA[<b/>]]></a>不同。既不是对的,也不是错的,但可能是收件人所期望的,而另一个则不是。由XML的消费者来决定它理解什么类型的消息。没有什么内在的Web服务说任何东西必须在CDATA中,只是这个特定的Web服务似乎是这样设计的。