我们知道CDATA无法嵌套,因此我希望使用Using CDATA inside another CDATA中提供的解决方案,将]]>
替换为]]]]><![CDATA[>
。
因此
<Root>
<![CDATA[
<AAA>
<![CDATA[
<BBB>hello world</BBB>
]]>
</AAA>
]]>
</Root>
变为
<Root>
<![CDATA[
<AAA>
<![CDATA[
<BBB>hello world</BBB>
]]]]><![CDATA[>
</AAA>
]]>
</Root>
XML是我的API的响应,将由不受我控制的其他程序使用。
对于.NET,我的实验表明InnerText
可以在所有CDATA部分输出文本。
var Root= doc.SelectNode("/Root");
var cdata = Root.InnerText;
cdata是
<AAA>
<![CDATA[
<BBB>hello world</BBB>
]]>
</AAA>
.NET的行为是否符合任何标准?是否有任何标准说明如何处理相邻的CDATA?如果我的API返回相邻的CDATA,其他程序或编程语言是否会对它进行处理?
答案 0 :(得分:2)
此行为绝对符合标准,并且应该在任何XML处理器中产生相同的结果。 CDATA部分可用于在任何地方转义任何字符数据(在另一个CDATA部分除外),您可以根据自己的喜好,相邻或不使用它们。来自specification:
定义:CDATA部分可能出现在可能出现字符数据的任何地方;它们用于转义包含字符的文本块,否则这些字符将被识别为标记。