1:读取服务器端xml(注意不同浏览器版本的区别),使用XML可以增强系统的扩展性,只用修改XML就可以实现增加减少功能的目的。
function loadXMLDoc1(dname){ if (window.XMLHttpRequest){ xhttp= new XMLHttpRequest(); } else { xhttp= new ActiveXObject( "Microsoft.XMLHTTP" ); } xhttp.open( "GET" ,dname, false ); xhttp.send( "" ); return xhttp.responseXML; } |
2:遍历XML节点
2.1:getElementsByTagName() 方法可以在取得一个节点后继续调用获得子节点,并且返回的是一个数组(只有一个节点时也要加上[0])
2.2:.childNodes[0].nodeValue) 取得一个节点的值的办法,节点的值也是节点(文本节点)
function test()
{ var xml=loadXMLDoc1( "book.xml" ); var bookss=xml.getElementsByTagName( "book" ); for ( var i=0;i<bookss.length;i++)
{ document.write(bookss[i].getElementsByTagName( "title" )[0].childNodes[0].nodeValue); document.write( "</br>" ); document.write(bookss[i].getElementsByTagName( "author" )[0].childNodes[0].nodeValue); document.write( "</br>" ); document.write(bookss[i].getElementsByTagName( "year" )[0].childNodes[0].nodeValue); document.write( "</br>" ); document.write(bookss[i].getElementsByTagName( "price" )[0].childNodes[0].nodeValue); document.write( "</br>" ); } } |
3:CDATA节点值读取
3.1:如果一个XML节点中是CDATA,读取时不同浏览器的方法不同,在IE下nodeValue可以正常获取到值,在FF和chrome下通过wholeText读取。
3.2:如果一个节点浏览器不支持,可以使用if进行判断。
function testCDATA()
{ var xml=loadXMLDoc1( "ceshi.xml" ); var HightChartsOpinions=xml.getElementsByTagName( "HightChartsOpinions" ); for ( var i=0;i<HightChartsOpinions.length;i++)
{ var wholeTextData=HightChartsOpinions[i].childNodes[0].wholeText; var text=wholeTextData?wholeTextData:HightChartsOpinions[i].childNodes[0].nodeValue document.write(text); document.write( "</br>" ); } return false ; } |
4: 通过XPATH进行XML的遍历
4.1:XPATH可以非常强大的进行XML节点的过滤,以下的链接中包含了常用的xpath用法。
http://www.w3school.com.cn/xpath/xpath_examples.asp
4.2:xpath读取xml 不同浏览器也有不同的方法实现,这里使用回调函数处理返回节点。
function xpath()
{ var xmlFilePath= "book.xml" ; var xpath= "/bookstore/book[price>45]" ; var callback= function (element)
{ document.write(element.getElementsByTagName( "title" )[0].childNodes[0].nodeValue); document.write( "</br>" ); document.write(element.getElementsByTagName( "author" )[0].childNodes[0].nodeValue); document.write( "</br>" ); document.write(element.getElementsByTagName( "year" )[0].childNodes[0].nodeValue); document.write( "</br>" ); document.write(element.getElementsByTagName( "price" )[0].childNodes[0].nodeValue); document.write( "</br>" ); }; handlerXML(xmlFilePath,xpath,callback); } function handlerXML(xmlFilePath,xpath,callback)
{ var xml=loadXMLDoc1(xmlFilePath); var action; if (window.ActiveXObject) { var nodes=xml.selectNodes(xpath); for (i=0;i<nodes.length;i++){ callback(nodes[i]); } } else if (document.implementation
&& document.implementation.createDocument){ var nodes=xml.evaluate(xpath,
xml, null ,
XPathResult.ANY_TYPE, null ); var result=nodes.iterateNext(); while (result){ callback(result); result=nodes.iterateNext(); } } } |