# 处理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

# 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

# 1.3 DOM 转 XML

XMLSerializer 类型用于把 DOM 文档序列化为 XML 字符串

let serializer = new XMLSerializer(); 
let xml = serializer.serializeToString(xmldom); 
console.log(xml); 
1
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

虽然这个规范定义了不少类型,但其中最重要的两个是 XPathEvaluatorXPathResult

# 2.2 单个节点结果

XPathResult.FIRST_ORDERED_NODE_TYPE 结果类型返回匹配的第一个节点,可以通过结果的 singleNodeValue 属性获取。

# 2.3 简单类型结果

使用布尔值、数值和字符串 XPathResult 类型,可以根据 XPath 获取简单、非节点数据类型。这些结果类型返回的值需要分别使用 booleanValue、numberValue 和 stringValue 属性获取。

上次更新: 3/9/2022, 6:56:39 PM