前端工具:MyCodepen】| 【W3School】| 【Bootstrap】| 【MarkDown】| 【正则表达式】| 【图标下载】| 【在线工具】| 【W3标准及兼容】| 【前端中文文档

用javascript操作xml

用javascript操作xml

可以使用标准DOM操作。

IE创建XML MSXML2.0DOMDocument

function createXMLDOM(){
    var version = [
        'MSXML2.0DOMDocument6.0',
        'MSXML2.0DOMDocument3.0',
        'MSXML2.0DOMDocument'
    ];
for (var i = 0; i < version.length; i++) {
    try{
        var xmlDom = new ActiveXObject(version[i]);
        return xmlDom;
    }catch(e){
        //跳过  有一个错了
    }
}
throw new Error("您的系统或者浏览器不支持XML库");  //所有的都错了

}

加载xml字符串 loadXML

xmlDom.loadXML('\nLee\n');

加载外部xml load

xmlDom.load('demo.xml'); //其他的操作一样,用xmlDom.

序列化xml xml

xmlDom.xml //alert(xmlDom.xml);

获取标签 getElementsByTagName('user')[0];

var user = xmlDom.getElementsByTagName('user')[0]; //alert(user);

获取节点类型 nodeType

user.nodeType;

获取节点名 nodeName TagName

user.nodeName;

获取节点内值 (不能用innerHTML,因为innerHTML它不是标准DOM)

user.firstChild.nodeValue;

创建标签 createElement();

var b = xmlDom.createElement('bbb');

获取根节点 documentElement

var root = xmlDom.documentElement;

添加节点 appendChild

root.appendChild(b);

创建节点文本 createTextNode();

var bText = xmlDom.createTextNode('kkk'); b.appendChild(bText);

IE服务器端同步和异步使用XML async

无法跨域加载。

在服务器端默认使用的是异步加载。

无法读取打印文件内容。

1、在服务器端,使用的异步加载,load()还没有加载完毕,就去打印。

使用同步加载

xmlDom.async = false; //同步是false,异步是true

使用同步请求超时,容易造成浏览器假死。

推荐使用异步,但是无法加载打印。使用 onreadystatechange 这个事件需写在load前面,意图先载入事件.

有四种状态:

  1. DOM正在加载
  2. DOM已经加载完数据
  3. DOM已经可以使用,但某些部分还无法访问
  4. DOM已经完全可以用

用readyState可以获取就绪状态值。

xmlDom.onreadystatechange = function(){
    if(xmlDom.readyState == 4)
        alert(xmlDom.xml);
    }
} 

xmlDom.load('demo.xml');

错误提示 parseError errorCode

xmlDom.onreadystatechange = function(){
    if(xmlDom.readyState == 4)
        if(xmlDom.parseError.eerorCode == 0){
            alert(xmlDom.xml);
        }else{
            throw new Error('错误行号:'+xmlDom.parseError.line+
                            '\n错误代码:'+xmlDom.parseError.errorCode+
                            '\n错误解释:'+xmlDom.parseError.reason);
        }
    }
} 

xmlDom.load('demo.xml');

DOM2级XML

创建XML document.implementation.createDocument('','root','');

//第一个参数命名空间,第二个参数xml根标签,第三个参数文档申明null

var xmlDom = document.implementation.createDocument('','root',''); alert(xmlDom);

  1. DOM2级支持基本DOM操作创建xml,但是不支持loadXML()方法,无法简易的通过字符串创建xml文档。 有load()方法,也不能跨域加载。

    xmlDom.load('demo.xml');

  2. 没有xmlDom.xml序列化,DOM2没有xml序列化方法

  3. 获取标签里面的值,除了

    xmlDom.getElementByTagName('user')[0].firstChild.nodeValue;

    还有

    xmlDom.getElementByTagName('user')[0].textContent;//w3c标准的

  4. 同步异步加载

    xmlDom.async = false; xmlDom.load('demo.xml'); //只支持firfox opera

  5. 模拟loadXML()方法,可以简易创建xml字符串

    var xmlParser = new DOMParser(); //创建对象

    var xmlStr = 'Lee';

    var xmlDom = xmlParser.parserFromString(xmlStr,'text/xml');

  6. 模拟.xml属性序列化字符串

    var serializer = new XMLSerializer();

    var xml = serializer.serializeToString(xmlDom);

posted @ 2014-08-29 16:33  FuGardenia  阅读(226)  评论(0编辑  收藏  举报

关于我们

喜欢编程。
上大学四年,一直在探索。
最终走上前端工程师的不归路。


我的微博:

@WOOEOOBOO

GitHub:

@FuGardenia

关注我们

微信号:MoveClouds
移动互联网,云前端信息传播自媒体。

Simple is beauty,Less is more.

简而美,少即多。