当前位置:  开发笔记 > 前端 > 正文

XHTML实体编码是否在XML文档中有效,只要它们包含在CDATA标记内?

如何解决《XHTML实体编码是否在XML文档中有效,只要它们包含在CDATA标记内?》经验,为你挑选了2个好方法。

这是一个有效(格式良好)的XML文档吗?

 

  ©

问题在于HTML/XHTML"©"实体编码在XML文档中是否有效,其中没有DTD或模式来定义它.表达上述内容的另一种方式是这样说:

 

  ©

这似乎是使用UTF-8编码的有效XML.

但这是否有效:

 

  

上述作者打算向XML解析器表明它应该通过上面的版权符号作为字符串"©" 而不是一个正确的Unicode字符.

在这方面,我觉得这句话有点令人困惑:"XML文档的新作者经常误解CDATA部分的目的,错误地认为其目的是"保护"数据在处理过程中不被视为普通字符数据.[但]字符数据是字符数据,无论它是通过CDATA部分还是普通标记表达."(来自维基百科)

我正在分别从第二位作者那里查看一个提议的XML格式,即使标签可以包含数字,它也包装了CDATA部分中的每个标签.

希望XML大师可以帮助消除对CDATA目的的困惑.

谢谢!



1> Eddie..:

CDATA部分用于允许通常在XML文档中以特殊方式解释的文本文本.也就是说,看起来像实体引用的东西,或看起来像XML标记的东西.CDATA部分中的任何内容都可以在没有CDATA部分的有效XML内部; 您只需要使用实体引用来编码各种特殊字符,这样它们就不会被视为XML标记,而是作为标记值的字符数据.

所以,是的,以下内容完全有效,只要它符合您的意图:

 

  

这里,inner元素的值©是XML解析器不会将其解释为版权符号的实体引用的值.您还可以执行以下操作:

 

   this looks  & xml ]]>

其中inner元素的值是

 this looks  & xml 

要在没有CDATA部分的情况下执行此操作:

 

  <normally> this looks <like/> &amp; 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解析器将返回错误.



2> bortzmeyer..:

艾迪给出了一个很好的答复,我刚刚完成了一些他显然没有提到的观点.

 

  ©>

是不合法的(实体"副本"不是预定义的,只有"lt","gt"和"quot"是XML格式).

 

  ©

是完全合法的,可能提供你想要的(版权符号).

 

  

也是完全合法但产生完全不同的结果(该元素将包含六个Unicode字符,而不是前一个示例中的一个).

 

]>

  ©>

也是合法的,并给出与第二个例子相同的结果.它可以避免键入您使用的某些字符,但不容易使用键盘/编辑器生成.

 

  ©

也是合法的(因为encoding ="UTF-8",编码="US-ASCII",它本来是不可能的),并给出相同的结果.假设您的键盘/编辑器允许您直接使用此角色.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有