这是一个有效(格式良好)的XML文档吗?
©
问题在于HTML/XHTML"©"实体编码在XML文档中是否有效,其中没有DTD或模式来定义它.表达上述内容的另一种方式是这样说:
©
这似乎是使用UTF-8编码的有效XML.
但这是否有效:
上述作者打算向XML解析器表明它应该通过上面的版权符号作为字符串"©" 而不是一个正确的Unicode字符.
在这方面,我觉得这句话有点令人困惑:"XML文档的新作者经常误解CDATA部分的目的,错误地认为其目的是"保护"数据在处理过程中不被视为普通字符数据.[但]字符数据是字符数据,无论它是通过CDATA部分还是普通标记表达."(来自维基百科)
我正在分别从第二位作者那里查看一个提议的XML格式,即使标签可以包含数字,它也包装了CDATA部分中的每个标签.
希望XML大师可以帮助消除对CDATA目的的困惑.
谢谢!
CDATA部分用于允许通常在XML文档中以特殊方式解释的文本文本.也就是说,看起来像实体引用的东西,或看起来像XML标记的东西.CDATA部分中的任何内容都可以在没有CDATA部分的有效XML内部; 您只需要使用实体引用来编码各种特殊字符,这样它们就不会被视为XML标记,而是作为标记值的字符数据.
所以,是的,以下内容完全有效,只要它符合您的意图:
这里,inner
元素的值©
是XML解析器不会将其解释为版权符号的实体引用的值.您还可以执行以下操作:
this looks & xml ]]>
其中inner
元素的值是
this looks & xml
要在没有CDATA部分的情况下执行此操作:
<normally> this looks <like/> & xml </normally>
这对于人类可读性来说要差得多,但就XML解析器而言却是等价的.如果你这样做(假设inner
元素被定义为包含字符串而不是XML的模式或DTD),那么你的XML解析器会抱怨:
this looks & xml
因此,您可以使用CDATA或实体转义来保护XML解析器中的特殊字符,以便XML数据的客户端可以获得inner
其中包含XML标记字符的值.
注意:要清楚,上面的示例是格式良好的 XML,但如果模式或DTD表示该元素inner
包含xsd:string或等效,那么它是一个无效的 XML文档.
并且,除非定义了HTML或XHTML实体,否则未定义为XML本身的一部分的HTML或XHTML实体不是有效的XML.您的XML解析器将返回错误.
艾迪给出了一个很好的答复,我刚刚完成了一些他显然没有提到的观点.
©>
是不合法的(实体"副本"不是预定义的,只有"lt","gt"和"quot"是XML格式).
©
是完全合法的,可能提供你想要的(版权符号).
也是完全合法但产生完全不同的结果(该元素
将包含六个Unicode字符,而不是前一个示例中的一个).
]>©>
也是合法的,并给出与第二个例子相同的结果.它可以避免键入您使用的某些字符,但不容易使用键盘/编辑器生成.
©
也是合法的(因为encoding ="UTF-8",编码="US-ASCII",它本来是不可能的),并给出相同的结果.假设您的键盘/编辑器允许您直接使用此角色.