XML DOM - 属性和方法

属性和方法向 XML DOM 定义了编程接口。

实例

下面的例子使用 XML 文件 books.xml

  1. <bookstore>
  2. <book category="children">
  3. <title lang="en">Harry Potter</title>
  4. <author>J K. Rowling</author>
  5. <year>2005</year>
  6. <price>29.99</price>
  7. </book>
  8. <book category="cooking">
  9. <title lang="en">Everyday Italian</title>
  10. <author>Giada De Laurentiis</author>
  11. <year>2005</year>
  12. <price>30.00</price>
  13. </book>
  14. <book category="web" cover="paperback">
  15. <title lang="en">Learning XML</title>
  16. <author>Erik T. Ray</author>
  17. <year>2003</year>
  18. <price>39.95</price>
  19. </book>
  20. <book category="web">
  21. <title lang="en">XQuery Kick Start</title>
  22. <author>James McGovern</author>
  23. <author>Per Bothner</author>
  24. <author>Kurt Cagle</author>
  25. <author>James Linn</author>
  26. <author>Vaidyanathan Nagarajan</author>
  27. <year>2003</year>
  28. <price>49.99</price>
  29. </book>
  30. </bookstore>

函数 loadXMLDoc(),位于外部 JavaScript 中,用于加载 XML 文件。

函数 loadXMLString(),位于外部 JavaScript 中,用于加载 XML 字符串。

加载并解析 XML 文件

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="/example/xdom/loadxmldoc.js"></script>
  4. </head>
  5. <body>
  6. <script type="text/javascript">
  7. xmlDoc=loadXMLDoc("/example/xdom/books.xml");
  8. document.write(xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue);
  9. document.write("<br />");
  10. document.write(xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue);
  11. document.write("<br />");
  12. document.write(xmlDoc.getElementsByTagName("year")[0].childNodes[0].nodeValue);
  13. </script>
  14. </body>
  15. </html>

加载并解析 XML 字符串

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="/example/xdom/loadxmlstring.js"></script>
  4. </head>
  5. <body>
  6. <script type="text/javascript">
  7. text="<bookstore>"
  8. text=text+"<book>";
  9. text=text+"<title>Harry Potter</title>";
  10. text=text+"<author>J K. Rowling</author>";
  11. text=text+"<year>2005</year>";
  12. text=text+"</book>";
  13. text=text+"</bookstore>";
  14. xmlDoc=loadXMLString(text);
  15. document.write(xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue);
  16. document.write("<br />");
  17. document.write(xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue);
  18. document.write("<br />");
  19. document.write(xmlDoc.getElementsByTagName("year")[0].childNodes[0].nodeValue);
  20. </script>
  21. </body>
  22. </html>

编程接口

DOM 把 XML 模拟为一系列节点接口。可通过 JavaScript 或其他编程语言来访问节点。在本教程中,我们使用 JavaScript。

对 DOM 的编程接口是通过一套标准的属性和方法来定义的。

属性经常按照“某事物是什么”的方式来使用(例如节点名是 "book")。

方法经常按照“对某事物做什么”的方式来使用(例如删除 "book" 节点)。

XML DOM 属性

一些典型的 DOM 属性:

  • x.nodeName - x 的名称
  • x.nodeValue - x 的值
  • x.parentNode - x 的父节点
  • x.childNodes - x 的子节点
  • x.attributes - x 的属性节点

注释:在上面的列表中,x 是一个节点对象。

XML DOM 方法

  • x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素
  • x.appendChild(node) - 向 x 插入子节点
  • x.removeChild(node) - 从 x 删除子节点

注释:在上面的列表中,x 是一个节点对象。

实例

从 books.xml 中的 <title> 元素获取文本的 JavaScript 代码:

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

在此语句执行后,txt 保存的值是 "Harry Potter"。

解释:

  • xmlDoc - 由解析器创建的 XML DOM
  • getElementsByTagName("title")[0] - 第一个 <title> 元素
  • childNodes[0] - <title> 元素的第一个子节点 (文本节点)
  • nodeValue - 节点的值 (文本自身)

在上面的例子中,getElementsByTagName 是方法,而 childNodes 和 nodeValue 是属性。

解析 XML 文件 - 跨浏览器实例

下面的代码片段使用 loadXMLDoc 函数把 books.xml 载入 XML 解析器中,并显示第一个 book 的数据:

  1. xmlDoc=loadXMLDoc("books.xml");
  2.  
  3. document.write(xmlDoc.getElementsByTagName("title")
  4. [0].childNodes[0].nodeValue);
  5. document.write("<br />");
  6. document.write(xmlDoc.getElementsByTagName("author")
  7. [0].childNodes[0].nodeValue);
  8. document.write("<br />");
  9. document.write(xmlDoc.getElementsByTagName("year")
  10. [0].childNodes[0].nodeValue);

输出:

  1. Harry Potter
  2. J K. Rowling
  3. 2005

在上面的例子中,我们为每个文本节点使用 childNodes[0],即使每个元素只有一个文本节点。这是由于 getElementsByTagName() 方法总是会返回数组。

解析 XML 字符串 - 跨浏览器实例

下面的代码加载并解析一个 XML 字符串:

下面的代码片段使用 loadXMLString 函数把 books.xml 载入 XML 解析器,并显示第一个 book 的数据:

  1. text="<bookstore>"
  2. text=text+"<book>";
  3. text=text+"<title>Harry Potter</title>";
  4. text=text+"<author>J K. Rowling</author>";
  5. text=text+"<year>2005</year>";
  6. text=text+"</book>";
  7. text=text+"</bookstore>";
  8.  
  9. xmlDoc=loadXMLString(text);
  10.  
  11. document.write(xmlDoc.getElementsByTagName("title")
  12. [0].childNodes[0].nodeValue);
  13. document.write("<br />");
  14. document.write(xmlDoc.getElementsByTagName("author")
  15. [0].childNodes[0].nodeValue);
  16. document.write("<br />");
  17. document.write(xmlDoc.getElementsByTagName("year")
  18. [0].childNodes[0].nodeValue);

输出:

  1. Harry Potter
  2. J K. Rowling
  3. 2005