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 |
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/12035231.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2019-12-13 15:13 jack_Meng 阅读(1512) 评论(0) 编辑 收藏 举报