zoukankan      html  css  js  c++  java
  • 用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(' Lee ');

    加载外部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+
                                '
    错误代码:'+xmlDom.parseError.errorCode+
                                '
    错误解释:'+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);

    -----------------------------------------------------------------------
    Simple is Beautiful,Less is More.
    --FuGardenia
  • 相关阅读:
    Java 项目运用个人看法(简写)
    windows 搭建Solr连接数据库
    总结2016年,计划2017
    如何解决,自己认为特别难的问题?(文摘)
    spring -quartz 定时任务多任务配置
    (转) java Timer 定时每天凌晨1点执行任务
    spring多数据源切换,写入报错的问题
    如何合理和有效的进行数据库设计
    Main方法定点执行线程任务
    莫辜负当下,莫悔恨过去,莫打扰错过的人
  • 原文地址:https://www.cnblogs.com/yunqianduan/p/3945267.html
Copyright © 2011-2022 走看看