Javascript操作xml

本文介绍如何使用JavaScript通过MSXml2组件操作XML数据,包括创建、加载、查询、修改及保存XML文档的方法。

 

         B/S系统中经常需要在客户端和服务器端之间交互数据,这些数据一般都是在客户端由Javscript组织然后发回服务器。对于一些复杂的数据我们一般用xml的格式组织。本文将给出javascriptxml的一些基本操作。
        javascript中是利用MSXml2组件对xml进行操作。该组件将xml加载到内存中形成一个树状的数据结构,可以利用XPath语言对其进行查询。
         首先需要创建一个MSxml2.DOMDocument的对象,如下:
var xmlDoc = new ActiveXObject("MSxml2.DOMDocument");,如果是ie5以上版本可以这样:CreateObject(“Microsoft.XMLDom);
创建了dom对象以后就可以用它加载一个xml文件或一段xml字符串,如下:
 var strFilePath = “file.xml”;
 xmlDoc.load(strFilePath);//加载xml文件
 var strXml = “<?xml,version=1.0?><root><node text=”Name”/></root>”;
 xmlDoc.loadXml(strXml);//加载xml字符串
当然还可以创建一个空的DOCDocument,然后向里面填写内容。
首先要创建xml的头(<?xml,version=’1.0’?>),如下:
 var = xmlDoc.createProcessingInstruction("xml","version='1.0'");
xmlDoc.appendChild(head);
接下来为xml创建节点,如下:
var rootNode = xmlDoc.createNode("1","Hello","");
//参数1-节点类型;参数2-节点名称;参数3-节点的命名空间
为节点创建属性,
       var attribut = xmlDoc.createAttribute("Name");//参数-属性名称
       Attribute.value = “programer”;//为属性赋值
       rootNode.setAttributeNode(attribut);//将属性附加到节点上
为节点添加文本值,
   rootNode.value = “Who am I”;
可以直接创建一个文本节点作为当前节点的子节点
 rootNode.appendChild(xmlDoc.createTextNode(“Who am I”));
将节点添加到DOCDocument
   xmlDoc.appendChild(rootNode);
 
 
当然还可以为一个节点创建子节点,如下
   rootNode.appendChild(xnChileNode);
 
 
利用XPath查找节点,也可以查找节点集
   Var myNode = xmlDoc.selectSingleNode(“//Hello/Node[@Text=’Who’]”);
//查找目标的根节点的节点名为Hello,这条语句查询的是Hello节点下的节点名为Node的节点中Text属性
//等于”Who”的节点
Var myNodeList = xmlDoc.selectNodes(“//Hello/Node);
 //查询Hello节点下的全部Node节点
 
删除节点,删除时只能删除某一个节点下的子节点,而不能直接删除孙节点。
    Var myNode = xmlDoc.selectSingleNode(“//Hello/Node[@Text=’Who’]”);
     Var helloNode = xmlDoc.selectSingleNode(“//Hello”);
     xmlDoc.removeChild(myNode);//错误
     xmlDoc.removeChild(helloNode);//正确
     helloNode.removeChild(myNode);//正确
 
保存结果。可以将xmlDoc中的内容保存到文件中,也可以直接获取它的xml字符串,如下:
   xmlDoc.save(strFilePath);//保存到文件
   alert(xmlDoc.xml);//输出xml字符串
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") 'JAVASCRIPT中的创建对象 set objXml=CreateObject("Microsoft.XMLDOM") '创建解析器对象 objXml.async="false" objXml.load("test.xml") '装载xml文件 objXml.load(Server.MapPath("test.xml")) '根据绝对路径装载xml文件 Set objRootsite = xmlDoc.getElementsByTagName("NewList") '查找某一节点"NewList" objNextRootsiteName = xmlDoc.getElementsByTagName("NewList").item(0).nodeName Set objRootsite = objXml.documentElement.selectSingleNode("NewList") '查找某一节点"NewList" document.write(objRootsite.nodeName) '当前节点名称 objNextRootsite = objRootsite.childNodes.item(1) '查找"NewList"的第一子节点 objNextRootsiteText = objNextRootsite.childNodes.item(1).text '查找"NewList"的第一子节点的节点内容 xmlChildNode = objXml.documentElement.childNodes '获取当前节点 document.Write (xmlChildNode.nodename) '当前节点名称 document.write (xmlChildNode.text) '当前节点文本内容 frm.label.innerText = xmlChildNode.item(1).text '将Xml中的文本内容转换为Html中的内容 xmlChildNode.GetAttributeNode("name").Nodevalue '获取属性名为name的属性值 xmlChildNode.length 'xmlChildNode节点的子节点数量 '取出一个节点的属性集合 set objnodes=objXml.documentElement.SelectSingleNode("//people/man").GetAttributeNode("name").attributes for each element in objnodes response.write element.nodename '属性名 response.write element.nodevalue '属性值 next xmlDoc.getElementsByTagName("from").item(0).text xmlDoc.removeChild objRootsite '删除某个节点 objXml.parseError '错误接受容器 objXml.parseError.errorCode '返回长整型错误代码 objXml.parseError.reason '返回字符串型错误原因 objXml.parseError.line '返回长整型错误行号 objXml.parseError.linePos '返回长整型错误行字符位置 objXml.parseError.srcText '返回错误所在行的源代码 objXml.parseError.url '返回url装载文档指针---最近一份含有解析错误的XML文档的URL地址 objXml.parseError.filePos '返回长整型错误文件位置---在文档中的绝对字符位置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值