Javascript里使用Dom操作Xml


Posted in Javascript onSeptember 20, 2006

一.Xml文件
二.IXMLDOMDocument/DOMDocument简介 
2.1 属性
2.1.1  parseError 
2.1.2  async. 
2.1.3  xml 
2.1.4  text 3 
2.1.5  attributes 
2.1.6  nodeName
2.1.7  documentElement 
2.1.8  nextSibling
2.1.9  childNodes
2.1.10  firstChild
2.1.11  lashChild
2.2 方法
2.2.1  loadXML
2.2.2  load
2.2.3  selectSingleNode
2.2.4  selectNodes
2.2.5  getElementsByTagName
2.2.6  hasChildNodes
三.例子
一.Xml文件 
<?xml version="1.0"?>
<book level="1"> 
  <Name>c++</Name> 
  <Price>20</Price> 
 <info>
<k>1</k>
  </info>
  <info>
    <k>2</k> 
  </info> 
</book> 
在asp.net下实现代码:
string str = Server.MapPath("test1.xml"); 
XmlTextWriter xmlWriter = new XmlTextWriter(str,null); 
xmlWriter.Formatting = System.Xml.Formatting.Indented; 
xmlWriter.WriteStartDocument(); 
xmlWriter.WriteStartElement("book"); 
xmlWriter.WriteAttributeString("level","1"); 
xmlWriter.WriteElementString("Name","c++"); 
xmlWriter.WriteElementString("Price","20"); 
xmlWriter.WriteStartElement("info"); 
xmlWriter.WriteElementString("k","1"); 
xmlWriter.WriteEndElement(); 
xmlWriter.WriteStartElement("info"); 
xmlWriter.WriteElementString("k","2"); 
xmlWriter.WriteEndElement(); 
xmlWriter.WriteEndElement(); 
xmlWriter.WriteEndDocument(); 
xmlWriter.Close(); 
二.IXMLDOMDocument/DOMDocument简介 
2.1 属性 
2.1.1  parseError 
Returns an IXMLDOMParseError object that contains information about the last parsing error
返回解析错误时的一个对象。
重要的有parseError.errorCode,parseError.reason
如果load时路径不对,会返回“系统未找到指定的对象”的错误
2.1.2  async 
Specifies whether asynchronous download is permitted
是否允许异步下载,布尔值
2.1.3  xml 
Contains the XML representation of the node and all its descendants. Read-only.
该点及下面派生的所有点的全部信息,只读如果要求book点的xml,返回“<book level="1"><Name>c++</Name><Price>20</Price><info><k>1</k></info><info><k>2</k></info></book>”,如果Name的xml,返回“<Name>c++</Name>”
2.1.4  text 
Represents the text content of the node or the concatenated text representing the node and its descendants. Read/write
该点及下面派生的所有点的全部节点值,可读可写
<price>20</price>
则text为20
"Name"节点的text为"c++"
2.1.5  attributes 
Contains the list of attributes for this node
返回属性的集合。
2.1.6  nodeName 
Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all 
other node types. Read-only
该节点名称
"Name"节点的nodeName为"Name","book"节点的nodeName为"book"
2.1.7  documentElement 
Contains the root element of the document
xml的根节点
上面的xml的根节点为"book"
2.1.8  nextSibling 
Contains the next sibling of the node in the parent's child list. Read-only.
下一个兄弟节点,只读
2.1.9  childNodes 
Contains a node list containing the child nodes
所有的子节点。
2.1.10  firstChild 
Contains the first child of the node
第一个子节点
2.1.11  lastChild 
Returns the last child node
最后一个子节点
2.2 方法 
2.2.1  loadXML 
Loads an XML document using the supplied string
2.2.2  load 
Loads an XML document from the specified locati
参数的路径为服务器端的,是相对路径
2.2.3  selectSingleNode 
Applies the specified pattern-matching operation to this node's context and returns the first matching node
返回第一个匹配的项
2.2.4  selectNodes 
Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as IXMLDOMNodeList
符合条件的所有项。
2.2.5  getElementsByTagName 
Returns a collection of elements that have the specified name
返回与元素名匹配的一个node的集合
2.2.6  hasChildNodes 
Provides a fast way to determine whether a node has children
判断是否含有子节点
返回值为bool值
三.例子 
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = false;
xmlDoc.load("test\\test1.xml");
if (xmlDoc.parseError.errorCode!=0)
{
var error = xmlDoc.parseError;
  alert(error.reason)
return;
}
var root = xmlDoc.documentElement;   //根节点
Form1.test1.value = root.xml;
/*结果如下:
<book level="1"><Name>c++</Name><Price>20</Price><info><k>1</k></info><info><k>2</k></info></book>*/
Form1.test1.value = root.nodeName;  //结果为"book"
var att = root.attributes;  //得到该点下所有属性的集合
var str = "";
for (var i=0; i<att.length; i++)
{
str += att.item(i).nodeName+":"+att.item(i).text;
}
Form1.test1.value = str;  //只有一个属性,所以结果为“level:1”
var fNode;
var lNode;
var nextSibling;
fNode = root.firstChild;   //第一个子节点Name
lNode = root.lastChild;    //最后一个子节点 info
nextSibling = fNode.nextSibling;  //第一个子节点Name的后一个兄弟节点,即Price
str = fNode.nodeName + ":" + fNode.text;  //结果:"Name:c++"
str = lNode.nodeName + ":" + lNode.text;  //结果为:"info:2"
str = nextSibling.nodeName + ":"  + nextSibling.text;  //结果为:"Price:20"
var nodeList;
str = "";
nodeList = xmlDoc.selectNodes("//info");  //查找元素名为"info"的节点
for (var j=0; j<nodeList.length; j++)  //有两个info节点
{
var infoNode = nodeList.item(j);
var cldNodes = infoNode.childNodes;  //info节点的子节点集
for (var k=0; k<cldNodes.length; k++)
{
       str += cldNodes.item(k).nodeName + ":" + cldNodes.item(k).text + " ";
}
//结果“k:1 k:2 ”
}
str = "";
var sNode;
sNode = xmlDoc.selectSingleNode("//info"); //找到第一个和"info"匹配的
var scldNodes = sNode.childNodes;  //info节点的子节点集
for (var t=0; t<scldNodes.length; t++)
{
str += scldNodes.item(t).nodeName + ":" + scldNodes.item(t).text + " ";
}
//结果“k:1”
Form1.test1.value = str;

Javascript 相关文章推荐
从Ajax到JQuery Ajax学习
Feb 14 Javascript
IE6下通过a标签点击切换图片的问题
Nov 14 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
jQuery插件windowScroll实现单屏滚动特效
Jul 14 Javascript
jquery+css实现的红色线条横向二级菜单效果
Aug 22 Javascript
javascript之Boolean类型对象
Jun 07 Javascript
实现React单页应用的方法详解
Aug 02 Javascript
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
node 使用 async 控制并发的方法
May 07 Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
js实现3D照片墙效果
Oct 28 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
Js+XML 操作
Sep 20 #Javascript
发现的以前不知道的函数
Sep 19 #Javascript
多个iframe自动调整大小的问题
Sep 18 #Javascript
跨浏览器的设置innerHTML方法
Sep 18 #Javascript
JavaScript Base64编码和解码,实现URL参数传递。
Sep 18 #Javascript
JavaScript静态的动态
Sep 18 #Javascript
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 #Javascript
You might like
php中time()和mktime()方法的区别
2013/09/28 PHP
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
python实现八大排序算法(1)
2017/09/14 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Python设计密码强度校验程序
2020/07/30 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
日语专业个人的求职信
2013/12/03 职场文书
成人继续教育实施方案
2014/03/01 职场文书
行政专员的岗位职责
2014/03/10 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
会计演讲稿范文
2014/05/23 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
红旗渠导游词
2015/02/09 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
浅谈Python数学建模之数据导入
2021/06/23 Python
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers