XML DOM 高级

XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。


XML DOM

DOM 把 XML 文档视为一种树结构。通过这个 DOM 树,可以访问所有的元素。可以修改它们的内容(文本以及属性),而且可以创建新的元素。元素,以及它们的文本和属性,均被视为节点。

在本教程的较早章节中,我们介绍了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 从 DOM 树中取回数据。

如需学习更多有关 XML DOM 的知识,请访问本站的 XML DOM 教程


获取元素的值

下面的代码检索第一个 <title> 元素的文本值:

  1. x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
  2. txt=x.nodeValue;

结果:txt = "Harry Potter"


获取属性的值

下面的代码检索第一个 <title> 元素的 "lang" 属性的文本值:

  1. txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");

结果:txt = "en"


改变元素的值

下面的代码改变第一个 <title> 元素的文本值:

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="/example/xml/loadxml.js"></script>
  4. </head>
  5. <body>
  6. <script type="text/javascript">
  7. xmlDoc = loadXMLDoc("/example/xml/bookstore.xml");
  8. x = xmlDoc.getElementsByTagName("title")[0].childNodes[0];
  9. x.nodeValue = "Easy Cooking";
  10. x = xmlDoc.getElementsByTagName("title")[0].childNodes[0];
  11. txt = x.nodeValue;
  12. document.write(txt);
  13. </script>
  14. </body>
  15. </html>

改变属性的值

setAttribute() 方法可用于改变已有属性的值,或创建一个新属性。下面的代码向每个 元素添加了名为 "edition" 的新属性(值是 "first"):

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="/example/xdom/loadxmldoc.js">
  4. </script>
  5. </head>
  6. <body>
  7. <script type="text/javascript">
  8. xmlDoc=loadXMLDoc("/example/xml/bookstore.xml");
  9. var x=xmlDoc.getElementsByTagName('book');
  10. for(i=0;i<x.length;i++)
  11. {
  12. x.item(i).setAttribute("edition","FIRST");
  13. }
  14. //Output book title and edition value
  15. var x=xmlDoc.getElementsByTagName("title");
  16. for (i=0;i<x.length;i++)
  17. {
  18. document.write(x[i].childNodes[0].nodeValue);
  19. document.write(" - Edition: ");
  20. document.write(x[i].parentNode.getAttribute('edition'));
  21. document.write("<br />");
  22. }
  23. </script>
  24. </body>
  25. </html>

创建元素

  • createElement() 方法创建新的元素节点。
  • createTextNode() 方法创建新的文本节点。
  • appendChild() 方法向节点添加子节点(在最后一个子节点之后)。

如需创建带有文本内容的新元素,需要同时创建元素节点和文本节点。

下面的代码创建了一个元素 (<edition>),然后把它添加到第一个 <book> 元素中:

  1. newel=xmlDoc.createElement("edition");
  2. newtext=xmlDoc.createTextNode("First");
  3. newel.appendChild(newtext);
  4. x=xmlDoc.getElementsByTagName("book");
  5. x[0].appendChild(newel);
例子解释:

创建 <edition> 元素创建值为 "First" 的文本节点把这个文本节点追加到 <edition> 元素把 元素追加到第一个 元素


删除元素

removeChild() 方法删除指定的节点(或元素)。下面的代码片段将删除第一个 元素中的第一个节点:

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="/example/xml/bookstore.js">
  4. </script>
  5. </head>
  6. <body>
  7. <script type="text/javascript">
  8. //检查最后一个节点是否是元素节点
  9. function get_lastchild(n)
  10. {
  11. var x=n.lastChild;
  12. while (x.nodeType!=1)
  13. {
  14. x=x.previousSibling;
  15. }
  16. return x;
  17. }
  18. xmlDoc=loadXMLDoc("/example/xdom/books.xml");
  19. document.write("book 节点的数目:");
  20. document.write(xmlDoc.getElementsByTagName('book').length);
  21. document.write("<br />");
  22. var lastNode=get_lastchild(xmlDoc.documentElement);
  23. var delNode=xmlDoc.documentElement.removeChild(lastNode);
  24. document.write("removeChild() 方法执行后 book 节点的数目:");
  25. document.write(xmlDoc.getElementsByTagName('book').length);
  26. </script>
  27. </body>
  28. </html>

注释:上例的结果可能会根据所用的浏览器而不同。Firefox 把新行字符当作空的文本节点,而 Internet Explorer 不是这样。您可以在 本站 的 XML DOM 教程中阅读到更多有关这个问题以及如何避免它的知识。

这里提供的 XML DOM 实例,只向您展示了少数几项我们可以利用 XML DOM 完成的工作。

如需学习更多有关 XML DOM 的知识,请访问 本站 的 XML DOM 教程