XML 注意事项

本节列出了您在使用 XML 时应该尽量避免使用的技术。

Internet Explorer - XML 数据岛

它是什么?XML 数据岛(XML Data Islands)是嵌入 HTML 页面中的 XML 数据。

为什么要避免使用它?XML 数据岛只在 Internet Explorer 浏览器中有效。

用什么代替它?您应当在 HTML 中使用 JavaScript 和 XML DOM 来解析并显示 XML。

如需更多有关 JavaScript 和 XML DOM 的信息,请访问 XML DOM 教程

XML 数据岛实例

本例使用 XML 文档 "cd_catalog.xml"。

  1. <CATALOG>
  2. <CD>
  3. <TITLE>Empire Burlesque</TITLE>
  4. <ARTIST>Bob Dylan</ARTIST>
  5. <COUNTRY>USA</COUNTRY>
  6. <COMPANY>Columbia</COMPANY>
  7. <PRICE>10.90</PRICE>
  8. <YEAR>1985</YEAR>
  9. </CD>
  10. <CD>
  11. <TITLE>Hide your heart</TITLE>
  12. <ARTIST>Bonnie Tyler</ARTIST>
  13. <COUNTRY>UK</COUNTRY>
  14. <COMPANY>CBS Records</COMPANY>
  15. <PRICE>9.90</PRICE>
  16. <YEAR>1988</YEAR>
  17. </CD>
  18. <CD>
  19. <TITLE>Greatest Hits</TITLE>
  20. <ARTIST>Dolly Parton</ARTIST>
  21. <COUNTRY>USA</COUNTRY>
  22. <COMPANY>RCA</COMPANY>
  23. <PRICE>9.90</PRICE>
  24. <YEAR>1982</YEAR>
  25. </CD>
  26. <CD>
  27. <TITLE>Still got the blues</TITLE>
  28. <ARTIST>Gary Moore</ARTIST>
  29. <COUNTRY>UK</COUNTRY>
  30. <COMPANY>Virgin records</COMPANY>
  31. <PRICE>10.20</PRICE>
  32. <YEAR>1990</YEAR>
  33. </CD>
  34. <CD>
  35. <TITLE>Eros</TITLE>
  36. <ARTIST>Eros Ramazzotti</ARTIST>
  37. <COUNTRY>EU</COUNTRY>
  38. <COMPANY>BMG</COMPANY>
  39. <PRICE>9.90</PRICE>
  40. <YEAR>1997</YEAR>
  41. </CD>
  42. <CD>
  43. <TITLE>One night only</TITLE>
  44. <ARTIST>Bee Gees</ARTIST>
  45. <COUNTRY>UK</COUNTRY>
  46. <COMPANY>Polydor</COMPANY>
  47. <PRICE>10.90</PRICE>
  48. <YEAR>1998</YEAR>
  49. </CD>
  50. <CD>
  51. <TITLE>Sylvias Mother</TITLE>
  52. <ARTIST>Dr.Hook</ARTIST>
  53. <COUNTRY>UK</COUNTRY>
  54. <COMPANY>CBS</COMPANY>
  55. <PRICE>8.10</PRICE>
  56. <YEAR>1973</YEAR>
  57. </CD>
  58. <CD>
  59. <TITLE>Maggie May</TITLE>
  60. <ARTIST>Rod Stewart</ARTIST>
  61. <COUNTRY>UK</COUNTRY>
  62. <COMPANY>Pickwick</COMPANY>
  63. <PRICE>8.50</PRICE>
  64. <YEAR>1990</YEAR>
  65. </CD>
  66. </CATALOG>

把 XML 文档绑定到 HTML 文档中的一个 <xml> 标签。id 属性定义数据岛的标识符,而 src 属性指向 XML 文件:

  1. <html>
  2. <body>
  3.  
  4. <xml id="cdcat" src="cd_catalog.xml"></xml>
  5.  
  6. <table border="1" datasrc="#cdcat">
  7. <tr>
  8. <td><span datafld="ARTIST"></span></td>
  9. <td><span datafld="TITLE"></span></td>
  10. </tr>
  11. </table>
  12.  
  13. </body>
  14. </html>

<table> 标签的 datasrc 属性把 HTML 表格绑定到 XML 数据岛。

<span> 标签允许 datafld 属性引用要显示的 XML 元素。在这个例子中,要引用的是 "ARTIST" 和 "TITLE"。当读取 XML 时,会为每个 <CD> 元素创建相应的表格行。

Internet Explorer - 行为

它是什么?Internet Explorer 5 引入了行为(behaviors)。Behaviors 是通过使用 CSS 样式向 XML (或 HTML )元素添加行为的一种方法。

为什么要避免使用它?只有 Internet Explorer 支持 behavior 属性。

使用什么代替它?使用 JavaScript 和 XML DOM (或 HTML DOM)来代替它。

实例

例子 1 - Mouseover Highlight

下面的 HTML 文件中的 <style> 元素为 <h1> 元素定义了一个行为:

  1. <html>
  2. <head>
  3. <style type="text/css">
  4. h1 { behavior: url(behave.htc) }
  5. </style>
  6. </head>
  7.  
  8. <body>
  9. <h1>Mouse over me!!!</h1>
  10. </body>
  11. </html>

以下是 XML 文档 "behave.htc":

  1. <attach for="element" event="onmouseover" handler="hig_lite" />
  2. <attach for="element" event="onmouseout" handler="low_lite" />
  3.  
  4. <script type="text/javascript">
  5. function hig_lite()
  6. {
  7. element.style.color='red';
  8. }
  9.  
  10. function low_lite()
  11. {
  12. element.style.color='blue';
  13. }
  14. </script>

这个 behavior 文件包含了一段 JavaScript,以及针对元素的事件句柄。

例子 2 - 打字机模拟

下面的 HTML 文件中的 <style> 元素为 id 为 "typing" 的元素定义了一个行为:

  1. <html>
  2. <head>
  3. <style type="text/css">
  4. #typing
  5. {
  6. behavior:url(typing.htc);
  7. font-family:'courier new';
  8. }
  9. </style>
  10. </head>
  11.  
  12. <body>
  13. <span id="typing" speed="100">IE5 introduced DHTML behaviors.
  14. Behaviors are a way to add DHTML functionality to HTML elements
  15. with the ease of CSS.<br /><br />How do behaviors work?<br />
  16. By using XML we can link behaviors to any element in a web page
  17. and manipulate that element.</p>
  18. </span>
  19. </body>
  20. </html>

以下是 XML 文档 "typing.htc":

  1. <attach for="window" event="onload" handler="beginTyping" />
  2. <method name="type" />
  3.  
  4. <script type="text/javascript">
  5. var i,text1,text2,textLength,t;
  6.  
  7. function beginTyping()
  8. {
  9. i=0;
  10. text1=element.innerText;
  11. textLength=text1.length;
  12. element.innerText="";
  13. text2="";
  14. t=window.setInterval(element.id+".type()",speed);
  15. }
  16.  
  17. function type()
  18. {
  19. text2=text2+text1.substring(i,i+1);
  20. element.innerText=text2;
  21. i=i+1;
  22. if (i==textLength)
  23. {
  24. clearInterval(t);
  25. }
  26. }
  27. </script>