js生成xml文件及js读取xml文件,获得xml节点子节点的个数(同Extjs中树获得子结点个数)

1.先说js读取xml文件吧:

//var szXml = OCX.GetXmlInfo();   ///得到xml的串

Demo:

var szXml = "<?xml version=\"1.0\"?><Root><PreviewInfo><PreviewType>1</PreviewType></PreviewInfo>"
  + "<NormalGroup><CountNum>4</CountNum>"
+ "<LaneInfo><Ioid>io1</Ioid ><Laneid>lane1</Laneid><WndIndex>wndindex1</WndIndex>"
+ "<Ioid>io2</Ioid ><Laneid>lane2</Laneid><WndIndex>wndindex2</WndIndex> "
+ "<Ioid>io3</Ioid ><Laneid>lane3</Laneid><WndIndex>wndindex3</WndIndex></LaneInfo > "
  + "</NormalGroup></Root>";

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");     ///建立模型

xmlDoc.async = "false";

xmlDoc.loadXML(szXml ); 

注意:在写xmlDoc.documentElement时,已经定位到了root节点之下。

而后,在用xmlDoc.documentElement.childNodes[0]时,便找到了PreviewInfo节点,而它的子节点,就是PreviewType,但要小心,PreviewType的值不是1,数值1也是一个节点,所以在用xmlDoc.documentElement.childNodes[0].childNodes[0]之后,需要再用一次childNodes[0],此时定位到了1节点,而用此节点的nodeValue属性,就拿到了1

不信的话,就alert(xmlDoc.documentElement.childNodes[0].childNodes[0].childNodes[0].nodeValue);可以看到1了吧。。。


然后其他的呢,就可以以此类推了:

xmlDoc.documentElement.childNodes[1].childNodes[1].childNodes[0].nodeValue;   这个值就是io1了。。。。。。

然后呢,我们要知道一个节点下有多少个子节点,方法是:

var tmp = xmlDoc.documentElement.childNodes[1].childNodes[1].childNodes;
alert(tmp.length);



2.用js生成xml文件:


var GroupNode = ResConfigTree.getNodeById(szNodeID);///得到树中被点击的结点
var XmlDoc = new ActiveXObject("MSXML2.DOMDocument");
var Instruction = XmlDoc.createProcessingInstruction("xml","version='1.0' encoding='utf-8'");

XmlDoc.appendChild(Instruction);

var Root = XmlDoc.createNode(1, "RequestInfo", "");   ///设置根结点RequestInfo

Element = XmlDoc.createElement("PollTime");    //设置一个结点
Element.text = '2';//赋值

Root.appendChild(Element);//将它放在根下面


var GroupInfoNode = XmlDoc.createNode(1, "GroupInfo", "");   //设置了一个空结点GroupInfo


//var GroupLaneCountNode = XmlDoc.createNode(1, "GroupLaneCount", "");//设置了另一个空结点

Element = XmlDoc.createElement("DataServerIp");

Element.text = “127.0.0.1”;

GroupInfoNode.appendChild(Element);                                    ///将DataServerIp放在GroupInfo之下,成为其子结点


var LaneInfoNode = XmlDoc.createNode(1, "LaneInfo", "");            ///设置Laneinfo空结点


Element = XmlDoc.createElement("LaneCount");
Element.text = '1';
LaneInfoNode.appendChild(Element);                                            //将LaneCount放在其下



GroupNode.eachChild(function(_node){                                       ///遍历被点击的树结点下面的所有子结点,将它们的属性放在xml中,放在LaneInfo结点之下
Element = XmlDoc.createElement("IOSN");
Element.text =  _node.attributes.ioid;
LaneInfoNode.appendChild(Element);

Element = XmlDoc.createElement("LaneSN");
Element.text = _node.attributes.sn;
LaneInfoNode.appendChild(Element);

Element = XmlDoc.createElement("PlayNum");
Element.text = iPalyNum;
LaneInfoNode.appendChild(Element);

});

GroupInfoNode.appendChild(LaneInfoNode);                     ////将Laneinfo结点放在Goupinfo结点下     

Root.appendChild(GroupInfoNode);                                    ////group节点挂在根上 RequestInfo下放group
XmlDoc.appendChild(Root);                                                 ////生成了xmlDoc,即xml文件


posted on 2012-03-13 20:30  java课程设计例子  阅读(647)  评论(0编辑  收藏  举报