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();
}
}
}
|