谈谈XHTML中CDATA

时间:2007-09-17 12:45:00 

  近来,随着XHTML(可扩展HTML)标准的出现,<script/>标签也经历了一些改变。该标签不再用language特性,而用type特性声明内嵌代码或要加入的外部文件的mime类型,JavaScript的mime类型是"text/javascript"。例如:

Example Source Code

<html> 
 <head> 
 <title>Title of Page</title> 
 <script type=”text/javascript”> 
 var i = 0; 
 </script> 
 <script type=”text/javascript” src=”../scripts/external.js”></script> 
 </head> 
 <body> 
 <!-- body goes here --> 
 </body> 
</html>


  即使许多浏览器不完全支持XHTML,但大多数开发者现在都用type特性,而不用language特性,以提供更好的XHTML支持。省略language特性不会带来任何问题,因为如前所述,所有浏览器都默认<script/>的该属性值为JavaScript。


  XHTML的第二个改变是使用CDATA段。XML中的CDATA段用于声明不应被解析为标签的文本(XHTML也是如此),这样就可以使用特殊字符,如小于(<)、大于(>)、和号(&)和双引号("),而不必使用它们的字符实体。考虑下面的代码:

Example Source Code



<SCRIPT type=”text/javascript”> 
 function compare(a, b) { 
 if (a < b) { 
 alert(“A is less than B”); 
 } else if (a > b) { 
 alert(“A is greater than B”); 
 } else { 
 alert(“A is equal to B”); 
 } 

</SCRIPT> 

  这个函数相当简单,它比较数字a和b,然后显示消息说明它们的关系。但是,在XHTML中,这段代码是无效的,因为它使用了三个特殊符号,即小于、大于和双引号。要修正这个问题,必须分别用这三个字符的XML实体<、>和"替换它们:


Example Source Code

<SCRIPT type=”text/javascript”> 
function compare(a, b) { 
if (a < b) { 
alert("A is less than B"); 
} else if (a > b) { 
131 
JavaScript in the Browser 
alert("A is greater than B"); 
} else { 
alert("A is equal to B"); 


</SCRIPT>


  这段代码存在两个问题。首先,开发者不习惯用XML实体编写代码。这使代码很难读懂。其次,在JavaScript中,这种代码实际上将视为有语法错,因为解释程序不知道XML实体的意思。用CDATA段即可以以常规形式(即易读的语法)编写JavaScript代码。正式加入CDATA段的方法如下:

Example Source Code

<SCRIPT type=”text/javascript”><![CDATA[ 
function compare(a, b) { 
if (a < b) { 
alert(“A is less than B”); 
} else if (a > b) { 
alert(“A is greater than B”); 
} else { 
alert(“A is equal to B”); 


]]></SCRIPT>


  虽然这是正式方式,但还要记住,大多数浏览器都不完全支持XHTML,这就带来主要问题,即这在JavaScript中是个语法错误,因为大多数浏览器还不认识CDATA段。


  当前使用的解决方案模仿了“对旧浏览器隐藏”代码的方法。使用单行的JavaScript注释,可在不影响代码语法的情况下嵌入CDATA段:

Example Source Code

<SCRIPT type=”text/javascript”> 
//<![CDATA[ 
function compare(a, b) { 
if (a < b) { 
alert(“A is less than B”); 
} else if (a > b) { 
alert(“A is greater than B”); 
} else { 
alert(“A is equal to B”); 


//]]> 
</SCRIPT>


标签:xml,cdata,xhtml
0
投稿

猜你喜欢

  • Go打包附件内容到执行文件的方法

    2024-04-27 15:32:21
  • python tkinter界面居中显示的方法

    2023-10-14 11:16:18
  • Python ORM数据库框架Sqlalchemy的使用教程详解

    2024-01-13 20:02:53
  • python让列表倒序输出的实例

    2021-05-06 21:04:30
  • Python threading中lock的使用详解

    2023-01-16 08:32:26
  • 基于Python实现英语单词小游戏

    2023-03-22 01:34:19
  • Python面向对象之类的内置attr属性示例

    2022-03-22 18:02:12
  • pycharm 终端部启用虚拟环境详情

    2022-04-01 17:52:59
  • MySQL的DATE_FORMAT函数的使用

    2024-01-18 09:52:28
  • 在cmd中运行.py文件: python的操作步骤

    2021-10-01 08:40:47
  • python中内置库os与sys模块的详细介绍

    2021-12-05 21:30:33
  • PyQt5+serial模块实现一个串口小工具

    2021-04-25 00:51:19
  • 全屏flash的尺寸分析

    2009-02-11 13:22:00
  • python打包exe开机自动启动的实例(windows)

    2023-11-08 06:34:00
  • Python+Tkinter实现简单的画图软件

    2021-11-11 17:25:45
  • 详解MySQL中的缓冲池(buffer pool)

    2024-01-26 01:05:53
  • python的endswith()的使用方法及实例

    2023-04-30 04:42:11
  • 浅谈五大Python Web框架

    2023-12-10 07:33:25
  • python:socket传输大文件示例

    2022-04-18 19:44:26
  • php的PDO事务处理机制实例分析

    2024-05-11 09:45:30
  • asp之家 网络编程 m.aspxhome.com