我注意到如果我将解码后的XML发送到端点,它会因为错误的请求错误而失败,但如果我将请求包装在CDATA中或编码字符,它运行正常,所以我的两个问题是:
为什么我需要使用CDATA或编码字符?
使我必须执行此操作的Web服务是什么?
在CDATA中包装邮件和编码字符有什么区别?
如果解析器忽略了CDATA,这是否意味着您尝试发送的消息将不会被处理?
我的web服务有一个名为Process的Web方法,但是尝试发送的消息是MessageB,所以我需要将MessageB的内容包装在CDATA中,因为XML Parser不会理解它吗?
如果我的网络服务包含一个名为MessageB的网络方法,是否仍然需要将其包装在CDATA中或进行转义?我的情况是我没有Web方法MessageB,而是一个名为Process的东西,它通过switch语句监听MessageB请求。我在想因为我没有将MessageB定义为web方法,这就是为什么我必须将它包装在CDATA中或逃避它,但我相信我的想法是错的?
答案 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服务似乎是这样设计的。