# 处理XML
# 1、浏览器对 XML DOM 的支持
DOM Level 3 增加了解析和序列化能力。
# 1.1 DOM Level 2 Core
DOM Level 2 增加了 document.implementation 的 createDocument() 方法。
createDocument(namespaceUri, root, doctype) 接收三个参数,namespaceUri 是命名空间,root 是根节点名称,doctype 是文档类型
创建空 XML 文档:
let xmldom = document.implementation.createDocument("", "root", null);
console.log(xmldom.documentElement.tagName); // "root"
let child = xmldom.createElement("child");
xmldom.documentElement.appendChild(child);
1
2
3
4
2
3
4
# 1.2 XML 转 DOM
把 XML 解析为 DOM 文档使用 DOMParser 类型
let parser = new DOMParser();
let xmldom = parser.parseFromString("<root><child/></root>", "text/xml");
console.log(xmldom.documentElement.tagName); // "root"
console.log(xmldom.documentElement.firstChild.tagName); // "child"
let anotherChild = xmldom.createElement("child");
xmldom.documentElement.appendChild(anotherChild);
let children = xmldom.getElementsByTagName("child");
console.log(children.length); // 2
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 1.3 DOM 转 XML
XMLSerializer 类型用于把 DOM 文档序列化为 XML 字符串
let serializer = new XMLSerializer();
let xml = serializer.serializeToString(xmldom);
console.log(xml);
1
2
3
2
3
# 2、XPath
# 2.1 DOM Level 3 XPath
DOM Level 3 XPath 规范定义了接口,用于在 DOM 中求值 XPath 表达式。
要确定浏览器是否支持 DOM Level 3 XPath,可以使用以下代码:
let supportsXPath = document.implementation.hasFeature("XPath", "3.0");
1
虽然这个规范定义了不少类型,但其中最重要的两个是 XPathEvaluator
和 XPathResult
。
# 2.2 单个节点结果
XPathResult.FIRST_ORDERED_NODE_TYPE 结果类型返回匹配的第一个节点,可以通过结果的 singleNodeValue 属性获取。
# 2.3 简单类型结果
使用布尔值、数值和字符串 XPathResult 类型,可以根据 XPath 获取简单、非节点数据类型。这些结果类型返回的值需要分别使用 booleanValue、numberValue 和 stringValue 属性获取。