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字符串
先看代码:
function LoadXmlText() { //拼接XML字符串
var txt = '';
txt = txt + "<note>";
txt = txt + "<to>George</to>";
txt = txt + "<from>John</from>";
txt = txt + "<heading>Reminder</heading>";
txt = txt + "<body>Don't forget the meeting!</body>";
txt = txt + "</note>"; if (window.DOMParser) {
//非IE浏览器
xmlDoc = (new DOMParser()).parseFromString(txt, "text/xml");
} else {
//IE浏览器
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
// 或者:xmlDoc = new ActiveXObject("MSXML2.DOMDocument"); xmlDoc.async = "false"; //不启用异步,保证加载文件成功之前不会进行下面操作
xmlDoc.loadXML(txt);
} console.log(xmlDoc);
}
如果浏览器支持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
javascript加载XML字符串或文件的更多相关文章
- js便签笔记(8)——js加载XML字符串或文件
1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObje ...
- C# 加载xml文档文件及加载xml字符串
//创建XmlDocument对象 XmlDocument xmlDoc = new XmlDocument(); //载入xml文件名 xmlDoc.Load(filename); //如果是xml ...
- 兼容加载Xml字符串
var _loadXML = function(xmlString){ var xmlDoc=null; //支持IE浏览器 if(!window.DOMParser && windo ...
- 通过 XML HTTP 加载 XML 文件
新建一个.aspx文件 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="02-通 ...
- dom4j加载xml文件
## dom4j加载xml文件 ``` // 1. 加载xml文件 InputStream is = MyTest.class.getResourceAsStream("user.xml&q ...
- Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout
一.布局文件part.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- 通过JS加载XML文件,跨浏览器兼容
引言 通过JS加载XML文件,跨多种浏览器兼容. 在Chrome中,没有load方法,需要特殊处理! 解决方案 部分代码 try //Internet Explorer { xmlDoc=new Ac ...
- 解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 以及MyBatis批量加载xml映射文件的方式
错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 的出现,意味着项目需要xml文件来 ...
- Android 如何使用 WebView 加载 HTML 字符串和处理转译字符
Android 如何使用 WebView 加载 HTML 字符串和处理转译字符 css bug 在 WebView 中编译 Web 应用 如果您希望在客户端应用中提供 Web 应用(或只是网页),则可 ...
随机推荐
- Python学习笔记2基本语法规则_20170611
# 1.print 显示示例 print('Hello, World!') 逗号分割变量,输出插入空格 name = 'BB' print('AA', name) # output: >> ...
- jQuery中的事件对象(八)
Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 一.事件对象基本认识 1. 什么时候会产生Event 对象呢? 例如: 当用户单击某个元素的时 ...
- 读取本地文件转化成MultipartFile
介绍 现在有个上传文件功能,需要将文件上传到oss上,但是文件有点多,于是使用接口进行上传.但是需要上传文件转换为MultipartFile类型文件进行上传. 主要代码 添加pom文件 <dep ...
- <String> 186 293 294 249
186. Reverse Words in a String II 先反转整个字符串,再反转每个单词(调整顺序也可以) 反转单词的时候:当 j 指到最后一个字符的时候,或者 j 的下一个指向空格,则反 ...
- 机器学习之线性回归以及Logistic回归
1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...
- docker 部署 HFish(集群部署)
主节点部署: docker run -d --name hfish-master -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : ...
- 第04组 Alpha冲刺(6/6)
队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 协调了一下组内的工作 复习了一下SuffixAutomata 接下来的计划 实现更多的功能 ...
- Office Online Server 在线编辑Office文档,安装部署
Office Online Server部署安装 部署环境 一台windows server2012 (搭建域环境)/多次遇坑之后,强烈建议域环境为server2012 一台windows serve ...
- QList去掉重复项 .toSet()报错???
我们知道QList::toSet()函数可以将QList转成QSet.可我却遇到报错: QList<QVariant> datas = it.value().values(); QSet& ...
- MyBatis-Generator 用法介绍
”工欲善其事,必先利其器“,古人说的很对,虽然不能做一个单纯的”工具帝“,但是自己有合适的工具集真的很关键.以前认识一个做逆向工程的高手,有自己的”反马套装“,其实不外乎就是 OD . IDA .Sy ...