js解析XML文件和XML字符串细节
js解析xml文件我=功能(xml文件){
VaR xmlDoc = null;
确定浏览器的类型。
支持IE浏览器
如果(!window.domparser窗口。ActiveX对象){
无功xmldomversions = { 'msxml。2。DOMDocument。6,'msxml。2。DOMDocument。3,'microsoft XMLDOM的};
对于(var i = 0;i < xmldomversions.length;i++){
尝试{
xmlDoc =新的ActiveX对象(xmldomversions {我});
打破;
} catch(e){
}
}
}
支持Mozilla browser
如果(document.implementation文件。执行。获取){
尝试{
/ * document.implementation.createdocument(' ',' ',null);这三个参数的方法
*第一个参数是一个包含文档所使用的命名空间URI的字符串;
*第二个参数是一个包含文档根元素名称的字符串;
*第三个参数是要创建的文档类型(也称为DOCTYPE)
* /
document.implementation.createdocument xmlDoc =(' ',' ',null);
} catch(e){
}
}
别的{
空回;
}
如果(xmlDoc!= NULL){
xmldoc.async = false;
XmlDoc.load(xml文件);
}
返回xmlDoc;
}
解析XML字符串
我=功能(xmlstring){
VaR xmlDoc = null;
确定浏览器的类型。
支持IE浏览器
如果(!window.domparser窗口。ActiveX对象){ / / window.domparser决定它是否是一个非IE浏览器
无功xmldomversions = { 'msxml。2。DOMDocument。6,'msxml。2。DOMDocument。3,'microsoft XMLDOM的};
对于(var i = 0;i < xmldomversions.length;i++){
尝试{
xmlDoc =新的ActiveX对象(xmldomversions {我});
xmldoc.async = false;
XmlDoc.loadXML(xmlstring); / / loadXML方法加载XML字符串
打破;
} catch(e){
}
}
}
支持Mozilla browser
如果(window.domparser document.implementation文件。执行。获取){
尝试{
/ * DOMParser对象的文本解析XML并返回一个XML文档对象。
*使用domparser,使用构造函数没有参数实例化它,然后调用它的parsefromstring()方法
* parsefromstring(文本,文本:ContentType)参数解析XML标记参数contentType文本内容类型
*可能是不支持文本的注释。
* /
domparser =新DOMParser();
domparser.parsefromstring xmlDoc =(xmlstring,中/ XML的);
} catch(e){
}
}
别的{
空回;
}
返回xmlDoc;
}
测试XML
一
一
二
二
三
三
四
四
五
五
六
六
使用方法
VaR xmlDoc = loadXML(文本,XML)
var elements = xmldoc.getelementsbytagname(公司);
对于(var i = 0;i < elements.length;i++){
变量名=元素{我}。getElementsByTagName(cnname ){ 0 }。firstchild.nodevalue;
VaR的IP =元素{我}。getElementsByTagName(CIP){ 0 }。firstchild.nodevalue;
}
上述方法适用于IE,让我们来讨论IE和Firefox下解析XML的问题。
IE和Firefox分别在XML文档和XML字符串上进行解析,所有代码都有注释,函数的哪部分将被看到。
删除笔记是可以的。
至于在Ajax环境中解析XML,其原理是相同的,仅在Ajax中,或解析返回的XML中。
xml文档解析中
VaR xmlDoc = null;
支持IE浏览器
如果(窗口。ActiveX对象){
xmlDoc =新的ActiveX对象(微软。XMLDOM );
}
支持Mozilla browser
如果(document.implementation文件。执行。获取){
document.implementation.createdocument xmlDoc =(' ',' ',null);
}
别的{
警报();
}
如果(xmlDoc!= NULL){
xmldoc.async = false;
xmldoc.load(的房子。XML);
}
IE和Firefox不仅是相同的解析器,而且解析过程也是不同的;
解析xml文档
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 } { 0 }。子子子。{ 0 },{ 0 }。节点)的流行150万
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 } { 0 }。子子子。{ 1 },{ 0 }。节点)流行三居室
子{ 1 }分析 / /层导线
/ /警报(xmlDoc。子{ 1 } { 1 }。子子子。{ 0 },{ 0 }。节点); / /流行200万
/ /警报(xmlDoc。子{ 1 } { 0 }。子子子。{ 0 },{ 0 }。节点); / /流行150万
/ /警报(xmlDoc。子{ 1 } { 0 }。子子子。{ 1 },{ 0 }。节点); / /流行三居室
您还可以使用项目(i)遍历
/ /无功节点= xmldoc.documentelement.childnodes;
/ /警报(nodes.item(0),ChildNodes.item(0),ChildNodes.item(0)。文本); / /流行150万
/ /警报(nodes.item(0),ChildNodes.item(1),ChildNodes.item(0)。文本); / /流行三居室
解析xml文档
/ / Firefox和IE解析XML节点的文本内容的价值不一样。
并且他将在一些节点之前和之后加上行。(不清楚为什么是这样的当你调试的萤火虫,所以最好是测试代码和改变环境。)
也就是说,第一个节点是
第三个节点是
让 / /分析子{ 0 }层
/ /警报(xmlDoc。子{ 0 } { 1 }。子。子{ 1 }。文本内容); / /流行150万
/ /警报(xmlDoc。子{ 0 } { 1 }。子。子{ 3 }。文本内容); / /流行三居室
/ /直接访问节点名称getElementsByTagName(地址)
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 }。文本内容)流行150万房三居3亿200万
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 }。子{ 1 }。文本内容)流行150万Sanju的房间
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 } { 1 }。子。子{ 1 }。文本内容)流行150万
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 } { 1 }。子。子{ 3 }。文本内容)流行三居室
/ /警报(xmldoc.getelementsbytagname(地址); / / { 0 }。子{ 3 }。文本内容)流行200万
Firefox也可以在遍历前后使用项目(1)函数,注意也有一些节点是添加节点 。
第一个节点是项(1),第二个节点是项(3),第三个节点是项(5)。
(项目)遍历遍历分析(1)
/ /无功节点= xmldoc.documentelement.childnodes;
/ /警报(nodes.item(1)。内容); / /流行150万Sanju的房间
/ /警报(nodes.item(1),ChildNodes.item(1)。内容); / /流行150万
/ /警报(nodes.item(1),ChildNodes.item(3)。内容); / /三居室
中xml分析
var++
50万A6+
65万A8+
17万+
;
跨浏览器、Firefox和IE浏览器使用解析解析器是不一样的。
无功xmlstrdoc = null;
如果Mozilla浏览器(窗口。DOMParser){ / /
解析器=新DOMParser();
xmlstrdoc = parser.parsefromstring(STR,文本或XML);
}其他Internet Explorer
xmlstrdoc =新的ActiveX对象(微软。XMLDOM );
XmlStrDoc。async =假;
XmlStrDoc.loadXML(STR);
}
解析xml字符串
/ /警报(xmlstrdoc.getelementsbytagname(车); / / { 0 } { 0 }。子子子。{ 0 },{ 0 }。节点)的流行50万
/ /警报(xmlstrdoc.getelementsbytagname(车); / / { 0 } { 0 }。子子子。{ 1 },{ 0 }。节点)流行A6
您还可以使用项目(i)遍历
/ /无功strnodes = xmlstrdoc.documentelement.childnodes;
/ /警报(strnodes.item(0),ChildNodes.item(0),ChildNodes.item(0)。文本); / /流行50万
/ /警报(strnodes.item(0),ChildNodes.item(1),ChildNodes.item(0)。文本); / /流行A6
用于解析XML字符串
/ / Firefox和IE解析XML节点的文本内容的价值不一样。
并且他将在一些节点之前和之后加上换行。
也就是说,第一个节点是
第三个节点是
/ /警报(xmlstrdoc。子{ 0 }。子{ 1 }。文本内容); / /流行65万A8
/ /警报(xmlstrdoc。子{ 0 } { 1 }。子。子{ 1 }。文本内容); / / A8
/ /警报(xmlstrdoc。子{ 0 } { 1 }。子。子{ 0 }。文本内容); / /流行65万
Firefox也可以在遍历前后使用项目(1)函数,注意也有一些节点是添加节点 。
第一个节点是项(1),第二个节点是项(3),第三个节点是项(5)。
/ /无功节点= xmlstrdoc.documentelement.childnodes;
/ /警报(nodes.item(1)。内容); / /流行65万A8
/ /警报(nodes.item(1),ChildNodes.item(0)。内容); / /流行65万
/ /警报(nodes.item(1),ChildNodes.item(1)。内容); / /流行A8
每个XML节点的级别是最令人讨厌的问题,只要它正确,它只能一次又一次地被尝试。
确定节点的层次结构或调试是很好的。
感觉JSON是更好的阅读和理解,这个分析太难了!
该文件house.xml内容如下:
150万
三居室
200万
230万
以上是本文的全部内容,希望大家能喜欢。