任何与相邻CDATA相关的标准?

时间:2016-03-04 18:49:21

标签: xml cdata

我们知道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,其他程序或编程语言是否会对它进行处理?

1 个答案:

答案 0 :(得分:2)

此行为绝对符合标准,并且应该在任何XML处理器中产生相同的结果。 CDATA部分可用于在任何地方转义任何字符数据(在另一个CDATA部分除外),您可以根据自己的喜好,相邻或不使用它们。来自specification

  

定义:CDATA部分可能出现在可能出现字符数据的任何地方;它们用于转义包含字符的文本块,否则这些字符将被识别为标记。