1. 创建xml dom
//只有IE浏览器支持,并且使用activeX实现
#demo.xml
<root>
<user>Lee</user>
<url>www.baidu.com</url>
</root>
function createXMLDOM() {
var version = [
"MSXML2.DOMDocument6.0",
"MSXML2.DOMDocument2.0",
"MSXML2.DOMDocument",
]
for (var i=0; i < version.length; i++) {
try {
var xmlDom = new ActiveXObject(version[i]);
return xmlDom;
} catch(e) {
}
}
throw new Error("不支持activeX");
}
2. 加载xml
var xmlDom = createXMLDOM();
xmlDom.loadXML("<root>\n<user>lee</user>\n</root>");
var user = xmlDom.getElementsByTagName("user")[0];
user.tagName; //节点标签名字
user.firstChild.NodeValue; //文本节点值
3. 加载外部文件
var xmlDom = createXMLDOM();
xmlDom.load("demo.xml");
var b = xmlDom.createElement("b");
b.appendChild(xmlDom.createTextNode("bbb"));
xmlDom.documentElement.appendChid(b);
4. 同步及异步使用xml
var xmlDom = createXMLDOM();
xmlDom.async = false; //不建议使用同步加载
xmlDom.load("demo.xml"); //默认使用异步加载
xmlDom.onreadystatechange = function () {
//加载有4次状态变化, 1表示正在加载, 2表示已经加载完毕,3 DOM部分可以使用, 4 DOM完全可以使用
alert(xmlDom.readyState); //这个事件比较特殊,this表示window
}
5. 解析错误
var xmlDom = createXMLDOM();
xmlDom.load("demo.xml");
xmlDom.parseError; //解析错误对象
xmlDom.parseError.errorCode == 0 // 0表示没有错误
6. 非IE使用XML
var xmlDom = document.implementation.createDocument("", "root", ""); param1: namespace param2: root label param3: doctype
var root = xmlDom.documentElement;
var user = xmlDom.createElement("user");
root.appendChild(user);
//非IE浏览器不支持load xml string, 但是支持load方法,从远程加载
xmlDom.async = false; //同步加载
xmlDom.load("demo.xml"); //只有firefox和opera支持
xmlDom.getElementsByTagName("user")[0].textContent; //IE不支持
xmlDom.onload = function() {
//加载完成后代码
}
//模拟loadXML方法
var xmlParser = new DOMParser();
var xmlStr = "<root><user>Lee</user></root>";
var xmlDom = xmlParser.parseFromString(xmlStr, "text/xml");
//模拟xml序列化
var serializer = new XMLSerializer();
var xmlStr = serializer.toString(xmlDom);
//解析错误
var error = xmlDom.getElementsByTagName("parseerror");
if (errors.length == 0){
alert(xmlStr);
} else {
throw new Error("错误:" + errors[0].textContent);
}
7. 跨浏览器处理XML
function getXMLDom(xmlStr) {
var xmlDom = null;
if (typeof window.DOMParser != "undefined") {
var xmlParser = new DOMParser();
xmlDom = xmlParser.parseFromString(xmlStr, "text/xml");
} else if (typeof window.ActiveXObject != "undefined"){
var version = [
"MSXML2.DOMDocument6.0",
"MSXML2.DOMDocument2.0",
"MSXML2.DOMDocument",
]
for (var i=0; i < version.length; i++) {
try {
var xmlDom = new ActiveXObject(version[i]);
xmlDom.loadXML(xmlStr);
} catch(e) {
}
}
} else {
throw new Error("浏览器不支持XMLDom对象。");
}
}