zoukankan      html  css  js  c++  java
  • javascript加载XML字符串或文件

    1. 加载XML文件

    方法1:ajax方式。代码如下:

    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open("GET", "data.xml", false);
    xhr.send(null);
    var xmlDoc = xhr.responseXML;
    console.log(xmlDoc); 

    (关于XMLHttpRequest对象的用法,请参加 http://www.w3school.com.cn/xmldom/dom_http.asp

    注意,代码第二行的“false”,表示不用异步。如果这里改为“true”,那么xmlDoc将得到null。因为js的异步操作,不会等待文件加载完,就直接执行下面的语句了。所以,我们这里必须设置为“false”,表示必须等待文件加载完,再执行以下操作,这样才能得到正确的xmlDoc。

    这种方式兼容所有高级浏览器,建议采用这种方式加载。

    方法2:IE的方式。代码如下:

    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = "false";
    xmlDoc.load("note.xml");
    console.log(xmlDoc); 

    通过IE特有的ActiveXObject("Microsoft.XMLDOM")对象的load()方法加载文件。

    注意,这里还是设置了异步是false,原因和方法1的一样。

    方法3:Firefox的方式,代码如下:

    var xmlDoc = document.implementation.createDocument("", "", null);
    xmlDoc.async = "false";
    xmlDoc.load("note.xml");
    console.log(xmlDoc);

    关于跨域加载:安全起见,现代浏览器不能跨域访问,即只能加载本机上的xml文件。

    2. 加载XML字符串

    先看代码:

    复制代码
     1       function LoadXmlText() {
     2 
     3             //拼接XML字符串
     4             var txt = '';
     5             txt = txt + "<note>";
     6             txt = txt + "<to>George</to>";
     7             txt = txt + "<from>John</from>";
     8             txt = txt + "<heading>Reminder</heading>";
     9             txt = txt + "<body>Don't forget the meeting!</body>";
    10             txt = txt + "</note>";
    11 
    12             
    13             if (window.DOMParser) {
    14                 //非IE浏览器
    15                 xmlDoc = (new DOMParser()).parseFromString(txt, "text/xml");
    16             } else {
    17                 //IE浏览器
    18                 xmlDoc = new ActiveXObject("Microsoft.XMLDOM");         
    19                 // 或者:xmlDoc = new ActiveXObject("MSXML2.DOMDocument");      
    20 
    21                 xmlDoc.async = "false";        //不启用异步,保证加载文件成功之前不会进行下面操作
    22                 xmlDoc.loadXML(txt);
    23             }
    24 
    25             console.log(xmlDoc);
    26         }
    复制代码

    如果浏览器支持window.DOMParser对象,则直接用它的parseFromString()方法加载xml字符串。

    IE浏览器不支持window.DOMParser,则用loadXML()加载。

    代码中注释都写的很亲你清楚。 

    出处:https://www.cnblogs.com/wangfupeng1988/p/3709924.html

    ============================================================================

    我根据上面的说明,也写个符合自己是一的吧

        // 加载xml文档
        function loadXmlFile(xmlFile) {
            var xmlDoc = null;
            if (window.ActiveXObject) {
                xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
                xmlDoc.async = false;
                xmlDoc.load(xmlFile);
            }
            else if (document.implementation && document.implementation.createDocument) {
                xmlDoc = document.implementation.createDocument('', 'doc', null);
                xmlDoc.async = false;
                xmlDoc.preserveWhiteSpace = true;
                xmlDoc.load(xmlFile);
            }
            else if (window.XMLHttpRequest) {//支持出网络获取
                var xmlhttp = new window.XMLHttpRequest();
                xmlhttp.open("GET", "#", false);
                xmlhttp.send(null);
                xmlDoc = xmlhttp.responseXML.documentElement;
            }
            return xmlDoc;
        }
        //加载xml字符串
        function loadXmlStr(xmlStr) {
            var xmlDoc = null;
            if (window.DOMParser) {
                //非IE浏览器
                xmlDoc = (new DOMParser()).parseFromString(xmlStr, "text/xml");
            }
            else {
                //IE浏览器
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                // 或者:xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
                xmlDoc.async = "false";        //不启用异步,保证加载文件成功之前不会进行下面操作
                xmlDoc.loadXML(xmlStr);
            }
            return xmlDoc;
        }

    参考:https://www.jb51.net/article/76019.htm

    ========================================================

    既然做到了这里,就不得不说的是操作xml,其实就是dom的操作,那么就可能会用到nodeName 、nodeType、 nodeValue 这些属性

    NodeTypes

    文档、元素、属性以及 HTML 或 XML 文档的其他方面拥有不同的节点类型。

    存在 12 种不同的节点类型,其中可能会有不同节点类型的子节点:

    节点类型描述子节点
    1 Element 代表元素 Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference
    2 Attr 代表属性 Text, EntityReference
    3 Text 代表元素或属性中的文本内容。 None
    4 CDATASection 代表文档中的 CDATA 部分(不会由解析器解析的文本)。 None
    5 EntityReference 代表实体引用。 Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
    6 Entity 代表实体。 Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
    7 ProcessingInstruction 代表处理指令。 None
    8 Comment 代表注释。 None
    9 Document 代表整个文档(DOM 树的根节点)。 Element, ProcessingInstruction, Comment, DocumentType
    10 DocumentType 向为文档定义的实体提供接口 None
    11 DocumentFragment 代表轻量级的 Document 对象,能够容纳文档的某个部分 Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
    12 Notation 代表 DTD 中声明的符号。 None

    节点类型 - 返回值

    对于每种节点类型,nodeName 和 nodeValue 属性的返回值:

    节点类型nodeName 返回nodeValue 返回
    1 Element 元素名 null
    2 Attr 属性名称 属性值
    3 Text #text 节点的内容
    4 CDATASection #cdata-section 节点的内容
    5 EntityReference 实体引用名称 null
    6 Entity 实体名称 null
    7 ProcessingInstruction target 节点的内容
    8 Comment #comment 注释文本
    9 Document #document null
    10 DocumentType 文档类型名称 null
    11 DocumentFragment #document 片段 null
    12 Notation 符号名称 null

    NodeTypes - Named Constants

    NodeType Named Constant
    1 ELEMENT_NODE
    2 ATTRIBUTE_NODE
    3 TEXT_NODE
    4 CDATA_SECTION_NODE
    5 ENTITY_REFERENCE_NODE
    6 ENTITY_NODE
    7 PROCESSING_INSTRUCTION_NODE
    8 COMMENT_NODE
    9 DOCUMENT_NODE
    10 DOCUMENT_TYPE_NODE
    11 DOCUMENT_FRAGMENT_NODE
    12 NOTATION_NODE

    参考:https://www.w3school.com.cn/jsref/prop_node_nodetype.asp

  • 相关阅读:
    JavaWeb_(Jar)使用fastjson解析json和序列化对象
    JavaWeb_JSTL标签数据的存储
    JavaWeb_EL表达式存储数据及获得项目路径
    JavaWeb_(MVC)管理员后台商品查询demo
    JavaWeb_(设计模式)单例模式
    JavaWeb_客户端相对/绝对路径和服务器端路径
    JavaWeb_Servlet生命周期
    控制导航条最后一个标签样式的三种方法
    JS跳转到顶部的方法
    数学对象Math ceil()、floor()、round()方法
  • 原文地址:https://www.cnblogs.com/mq0036/p/12035231.html
Copyright © 2011-2022 走看看