📜  讨论XML DOM(1)

📅  最后修改于: 2023-12-03 15:28:06.833000             🧑  作者: Mango

讨论XML DOM

XML DOM (XML Document Object Model) 是一种表示和操作 XML 文档的标准模型。它允许我们以树形结构来遍历文档中的各个元素,并对其进行增、删、改、查等操作。在使用 XML 进行数据交换或存储时,XML DOM 的使用非常普遍,因此掌握 XML DOM 是非常必要的。

XML DOM 的基本概念
文档节点(Document)

XML DOM 将整个 XML 文档看作一个文档节点(Document),文档节点是根节点,表示整个 XML 文档。

元素节点(Element)

XML 文档中的每个元素都是一个元素节点(Element)。元素节点可以包含文本、属性、子元素等。

属性节点(Attribute)

XMLElement 对象的属性(Attribute)可以通过元素节点来访问。例如,xmlDoc.getElementsByTagName("book")[0].getAttribute("category"),返回"WEB"。

文本节点(Text)

XML 文档中的文本也是一个节点(Text)。XML 文档中的空格和换行符也被视为文本节点。

XML DOM 的基本操作
加载和访问 XML 文档

在 JavaScript 中,我们可以使用 XMLHttpRequest 对象来加载XML文档。一旦加载完毕,我们可以使用DOM API来操作文档。

let xmlDoc;
if (window.XMLHttpRequest) {
  // IE7+,Firefox,Chrome,Opera,Safari 浏览器执行代码
  xmlhttp = new XMLHttpRequest();
} else {
  // IE6,IE5 浏览器执行代码
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    xmlDoc = this.responseXML;
    console.log(xmlDoc);
  }
};
xmlhttp.open("GET", "books.xml", true);
xmlhttp.send();

上述代码中,我们使用 XMLHttpRequest 对象来加载名为“books.xml”的 XML 文档。通过判断 XMLHttpRequest 对象在不同浏览器的调用方式,来保证整个脚本的兼容性。

遍历和访问 XML 文档

我们可以通过元素节点(Element),遍历和访问 XML 文档中的各个节点。

let xmlDoc = ...; // 先加载 XML 文档
let books = xmlDoc.getElementsByTagName("book");
for (let i = 0; i < books.length; i++) {
  let title = books[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
  let author = books[i].getElementsByTagName("author")[0].childNodes[0].nodeValue;
  console.log(title + " - " + author);
}

上述代码中,我们使用 xmlDoc.getElementsByTagName("book")来获取XML文档中所有 元素,然后通过 for 循环遍历每个元素,进而通过 getElementsByTagName 取到属性值,并通过该属性值做进一步的操作。

修改和保存 XML 文档

我们可以通过修改对象的属性,来修改 XML 文档,然后再通过 save 方法将修改保存至 XML 文件。

xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue = "新的作者";
xmlDoc.save("filename.xml");

上述代码中,我们修改了 XML 文档中第一个 元素的属性值,然后通过 xmlDoc.save 方法将修改保存至 XML 文件。

总结

XML DOM 是一种十分重要的技术,它充分利用 JavaScript 等编程语言的特性,对 XML 文档进行操作和处理。了解 XML DOM 的基本概念和基本操作,可以大大提高开发的效率,同时也可以更好地理解和应用 XML 相关的技术。