function createXMLDOM (){ var arrXmldom=[ "Microsoft.XMLDOM", "Msxml2.DOMDocument", "Msxml2.DOMDocument.3.0", "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.5.0"]; for(var i=0;i <arrXmldom.length;i++){ try{ var xmlDomValue=new ActiveXObject(arrXmldom[i]); return xmlDomValue; }catch(e){ try{ if (document.implementation&&document.implementation.createDocument){ var xmlDomValue= document.implementation.createDocument( " ", " ",null); return xmlDomValue; } }catch(e){} } } return null; } function readDoc() { str ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><returncode>1</returncode></root>" var doc = createXMLDOM(); if (doc == null) { alert("创建DOM对象失败"); return null; } doc.async = false; doc.loadXML(str); oErr = doc.parseError; if (oErr.errorCode != 0) { alert("解析XML数据错误:\n" + oErr.reason + "\nLine:" + oErr.line + "\nLinepos:" + oErr.linepos + "\nsrcText:\n" + oErr.srcText); return null; } if (doc.selectSingleNode("//root/returncode") != null) { alert(doc.selectSingleNode("//root/returncode").text); } }
<script language="JavaScript"> <!-- var doc = new ActiveXObject("Msxml2.DOMDocument"); //ie5.5+,CreateObject("Microsoft.XMLDOM") //加载文档 //doc.load("b.xml");//创建文件头 var p = doc.createProcessingInstruction("xml","version='1.0' encoding='gb2312'"); //添加文件头 doc.appendChild(p);//用于直接加载时获得根接点 //var root = doc.documentElement;//两种方式创建根接点 // var root = doc.createElement("students"); var root = doc.createNode(1,"students",""); //创建子接点 var n = doc.createNode(1,"ttyp",""); //指定子接点文本 //n.text = " this is a test";
//创建孙接点 var o = doc.createElement("sex"); o.text = "男"; //指定其文本 //创建属性 var r = doc.createAttribute("id"); r.value="test"; //添加属性 n.setAttributeNode(r); //创建第二个属性 var r1 = doc.createAttribute("class"); r1.value="tt";
//添加属性 n.setAttributeNode(r1); //删除第二个属性 n.removeAttribute("class"); //添加孙接点 n.appendChild(o); //添加文本接点 n.appendChild(doc.createTextNode("this is a text node.")); //添加注释 n.appendChild(doc.createComment("this is a comment\n"));
//添加子接点 root.appendChild(n);
//复制接点 var m = n.cloneNode(true); root.appendChild(m);
//删除接点 root.removeChild(root.childNodes(0)); //创建数据段 var c = doc.createCDATASection("this is a cdata"); c.text = "hi,cdata"; //添加数据段 root.appendChild(c);
//添加根接点 doc.appendChild(root); //查找接点 var a = doc.getElementsByTagName("ttyp"); //var a = doc.selectNodes("//ttyp"); //显示改接点的属性 for(var i= 0;i<a.length;i++) { alert(a[i].xml); for(var j=0;j<a[i].attributes.length;j++) { alert(a[i].attributes[j].name); } } //修改节点,利用XPATH定位节点 var b = doc.selectSingleNode("//ttyp/sex"); b.text = "女"; //alert(doc.xml); //XML保存(需要在服务端,客户端用FSO) //doc.save();
不建议javascript直接操作客户端xml文件.不过也需要一定权限.用的最多的就是javascript操作ajax返回的xml下面例子是读取一个简单的xml,方法很多. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script type="text/javascript"> //将字符串转化为xml对象 function convertXml(str){ if(document.all){ //IE var xmlDom=new ActiveXObject("Microsoft.XMLDOM") xmlDom.loadXML(str) return xmlDom } else //FF return new DOMParser().parseFromString(str, "text/xml") } var xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><parent><a>A</a><b>B</b><c>C</c></parent><parent><a>A1</a><b>B1</b><c>C1</c></parent></root>"; var xmlObj=convertXml(xml); //如果是ajax返回的xml对象,则直接 var xmlObj=obj.responseXML; var o=xmlObj.getElementsByTagName("parent"); for(var i=0;i<o.length;i++){ var oo=o[i].childNodes; for(var j=0;j<oo.length;j++){ alert(oo[j].firstChild.nodeValue); } } </script> </HEAD> <BODY>
xmlDoc.async=false; xmlDoc.load(xmlFile); ieFlag="ie"; }else if(document.implementation && document.implementation.createDocument){ xmlDoc=document.implementation.createDocument("","",null); xmlDoc.async=false; xmlDoc.load(xmlFile); ieFlag="other"; }else{ alert("Can not create XML DOM Document object in your IE.\nMaybe use Microsoft or FireFox or Netscape IE will better."); } var strResult=""; var subNode=""; var subNode2=""; var attrib=""; if(ieFlag=="ie") { var arealist=xmlDoc.documentElement.getElementsByTagName("area"); for (var i=0; i< arealist.length; i++) { try{ strResult=strResult + "<b>"+arealist[i].childNodes[0].text+"</b>, "; }catch(e){ } try{ var userlist=arealist[i].getElementsByTagName("user"); for(var t=0;t<userlist.length;t++) { attrib+="<b>"+userlist[t].getAttribute("userid")+"</b>, "; subNode+="<b>"+userlist[t].firstChild.text+"</b>, "; subNode2+="<b>"+userlist[t].childNodes[2].text+"</b>, "; } }catch(e){ } } } if(ieFlag=="other") { var arealist=xmlDoc.getElementsByTagName("area"); for(var j=0;j<arealist.length;j++) { try{ strResult =strResult+"<b>"+ arealist[j].getElementsByTagName("areaname")[0].firstChild.nodeValue+"</b>, "; }catch(e){} try{ var userlist=arealist[j].getElementsByTagName("user"); for(var k=0;k<userlist.length;k++) { attrib=attrib+"<b>"+userlist[k].getAttribute("userid")+"</b>, "; subNode=subNode+"<b>"+userlist[k].getElementsByTagName("name")[0].childNodes[0].nodeValue+"</b>, "; subNode2=subNode2+"<b>"+userlist[k].getElementsByTagName("jobtitle")[0].firstChild.nodeValue+"</b>, "; } }catch(e){} } } document.write("Exist area : "+strResult); document.write("<br>AttributeValue(userid): "+attrib); document.write("<br>subNodeValue(Name) : "+subNode); document.write("<br>subNodeValue2(Jobtitle) : "+subNode2); } GetXMLData("VisitUser.xml"); </script> </body> </html>HTML文件和XML文件放在同一个目录中,用IIS测试即可,
function loadXMLDoc(fname){ var xmlDoc; // code for IE if (window.ActiveXObject) { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } // code for Mozilla, Firefox, Opera, etc. else if (document.implementation && document.implementation.createDocument) {
var arrXmldom=[ "Microsoft.XMLDOM",
"Msxml2.DOMDocument",
"Msxml2.DOMDocument.3.0",
"Msxml2.DOMDocument.4.0",
"Msxml2.DOMDocument.5.0"];
for(var i=0;i <arrXmldom.length;i++){
try{
var xmlDomValue=new ActiveXObject(arrXmldom[i]);
return xmlDomValue;
}catch(e){
try{
if (document.implementation&&document.implementation.createDocument){
var xmlDomValue= document.implementation.createDocument( " ", " ",null);
return xmlDomValue;
}
}catch(e){}
}
}
return null;
}
function readDoc() {
str ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><returncode>1</returncode></root>"
var doc = createXMLDOM();
if (doc == null) {
alert("创建DOM对象失败");
return null;
}
doc.async = false;
doc.loadXML(str);
oErr = doc.parseError;
if (oErr.errorCode != 0) {
alert("解析XML数据错误:\n" + oErr.reason + "\nLine:" + oErr.line + "\nLinepos:" + oErr.linepos + "\nsrcText:\n" + oErr.srcText);
return null;
}
if (doc.selectSingleNode("//root/returncode") != null) {
alert(doc.selectSingleNode("//root/returncode").text);
}
}
<script language="JavaScript">
<!--
var doc = new ActiveXObject("Msxml2.DOMDocument"); //ie5.5+,CreateObject("Microsoft.XMLDOM")
//加载文档
//doc.load("b.xml");//创建文件头
var p = doc.createProcessingInstruction("xml","version='1.0' encoding='gb2312'"); //添加文件头
doc.appendChild(p);//用于直接加载时获得根接点
//var root = doc.documentElement;//两种方式创建根接点
// var root = doc.createElement("students");
var root = doc.createNode(1,"students",""); //创建子接点
var n = doc.createNode(1,"ttyp",""); //指定子接点文本
//n.text = " this is a test";
//创建孙接点
var o = doc.createElement("sex");
o.text = "男"; //指定其文本 //创建属性
var r = doc.createAttribute("id");
r.value="test"; //添加属性
n.setAttributeNode(r); //创建第二个属性
var r1 = doc.createAttribute("class");
r1.value="tt";
//添加属性
n.setAttributeNode(r1); //删除第二个属性
n.removeAttribute("class"); //添加孙接点
n.appendChild(o); //添加文本接点
n.appendChild(doc.createTextNode("this is a text node.")); //添加注释
n.appendChild(doc.createComment("this is a comment\n"));
//添加子接点
root.appendChild(n);
//复制接点
var m = n.cloneNode(true); root.appendChild(m);
//删除接点
root.removeChild(root.childNodes(0)); //创建数据段
var c = doc.createCDATASection("this is a cdata");
c.text = "hi,cdata";
//添加数据段
root.appendChild(c);
//添加根接点
doc.appendChild(root); //查找接点
var a = doc.getElementsByTagName("ttyp");
//var a = doc.selectNodes("//ttyp"); //显示改接点的属性
for(var i= 0;i<a.length;i++)
{
alert(a[i].xml);
for(var j=0;j<a[i].attributes.length;j++)
{
alert(a[i].attributes[j].name);
}
} //修改节点,利用XPATH定位节点
var b = doc.selectSingleNode("//ttyp/sex");
b.text = "女"; //alert(doc.xml); //XML保存(需要在服务端,客户端用FSO)
//doc.save();
//查看根接点XML
if(n)
{
alert(n.ownerDocument.xml);
}//-->
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script type="text/javascript">
//将字符串转化为xml对象
function convertXml(str){
if(document.all){ //IE
var xmlDom=new ActiveXObject("Microsoft.XMLDOM")
xmlDom.loadXML(str)
return xmlDom
}
else //FF
return new DOMParser().parseFromString(str, "text/xml")
} var xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><parent><a>A</a><b>B</b><c>C</c></parent><parent><a>A1</a><b>B1</b><c>C1</c></parent></root>";
var xmlObj=convertXml(xml);
//如果是ajax返回的xml对象,则直接 var xmlObj=obj.responseXML;
var o=xmlObj.getElementsByTagName("parent");
for(var i=0;i<o.length;i++){
var oo=o[i].childNodes;
for(var j=0;j<oo.length;j++){
alert(oo[j].firstChild.nodeValue);
}
}
</script>
</HEAD> <BODY>
2,客户端的JavaScript读取服务器上的XML文件,首先假设在服务器上存在:
(1)文件名VisitUser.xml
(2),文件结构:
--------------------------------------------------------------------
<?xml version="1.0" encoding="gb2312"?>
<visiter>
<area areaid="shenzhen">
<areaname>shenzhen</areaname>
<user userid="001">
<name>xiaoM</name>
<sex>boy</sex><
jobtitle>web</jobtitle>
<userip>192.168.1.1</userip>
<addtime>2009-02-17 15:30:20</addtime>
</user>
<user userid="002">
<name>BBC</name>
<sex>boy</sex>
<jobtitle>web2.0</jobtitle>
<userip>192.168.1.151</userip>
<addtime>2009-02-19 15:30:20</addtime>
</user>
</area>
<area areaid="guangzhou">
<areaname>guangzhou</areaname>
<user userid="003"><name>Arian</name>
<sex>boy</sex>
<jobtitle>WEB2.0</jobtitle>
<userip>192.168.1.151</userip>
<addtime>2009-2-17 10:57:09</addtime>
</user>
</area>
</visiter>
--------------------------------------------------------------------
HTML文件(index.htm)为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>TEST</title>
</head>
<style type="text/css">
body,td,input{font-family:verdana,Arial; font-size:12px; font-weight:normal;}
span{font-family:"Arial black",verdana; font-size:16px; font-weight:bold;}
a:link{font-family:verdana,Arial; font-size:12px; font-weight:normal; color:#FF6600; text-decoration:none;}
a:visited{font-family:verdana,Arial; font-size:12px; font-weight:normal; color:#FF6600; text-decoration:none;}
a:hover{font-family:verdana,Arial; font-size:12px; font-weight:normal; color:#CC0000; text-decoration:none;}
</style>
<body>
<p>
<b>created: </b>2009-04-15;<br>
<b>athor:</b>shenzhenNBA
</p>
<script language="javascript" type="text/javascript">
function GetXMLData(XMLFileName){
var xmlDoc;
var xmlFile;
var ieFlag="ie";
xmlFile=XMLFileName;
if (window.ActiveXObject)
{
var activeXNameList=new Array("MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XMLDOM","MSXML.DOMDocument");
for(var h=0;h<activeXNameList.length;h++)
{
try{
xmlDoc=new ActiveXObject(activeXNameList[h]);
}catch(e){
continue;
}
if(xmlDoc)
{break; }
}
xmlDoc.async=false;
xmlDoc.load(xmlFile);
ieFlag="ie";
}else if(document.implementation && document.implementation.createDocument){
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async=false;
xmlDoc.load(xmlFile);
ieFlag="other";
}else{
alert("Can not create XML DOM Document object in your IE.\nMaybe use Microsoft or FireFox or Netscape IE will better.");
} var strResult="";
var subNode="";
var subNode2="";
var attrib="";
if(ieFlag=="ie")
{
var arealist=xmlDoc.documentElement.getElementsByTagName("area");
for (var i=0; i< arealist.length; i++)
{
try{
strResult=strResult + "<b>"+arealist[i].childNodes[0].text+"</b>, ";
}catch(e){ }
try{
var userlist=arealist[i].getElementsByTagName("user");
for(var t=0;t<userlist.length;t++)
{
attrib+="<b>"+userlist[t].getAttribute("userid")+"</b>, ";
subNode+="<b>"+userlist[t].firstChild.text+"</b>, ";
subNode2+="<b>"+userlist[t].childNodes[2].text+"</b>, ";
}
}catch(e){ }
}
} if(ieFlag=="other")
{
var arealist=xmlDoc.getElementsByTagName("area");
for(var j=0;j<arealist.length;j++)
{
try{
strResult =strResult+"<b>"+ arealist[j].getElementsByTagName("areaname")[0].firstChild.nodeValue+"</b>, ";
}catch(e){}
try{
var userlist=arealist[j].getElementsByTagName("user");
for(var k=0;k<userlist.length;k++)
{
attrib=attrib+"<b>"+userlist[k].getAttribute("userid")+"</b>, ";
subNode=subNode+"<b>"+userlist[k].getElementsByTagName("name")[0].childNodes[0].nodeValue+"</b>, ";
subNode2=subNode2+"<b>"+userlist[k].getElementsByTagName("jobtitle")[0].firstChild.nodeValue+"</b>, ";
}
}catch(e){}
}
}
document.write("Exist area : "+strResult);
document.write("<br>AttributeValue(userid): "+attrib);
document.write("<br>subNodeValue(Name) : "+subNode);
document.write("<br>subNodeValue2(Jobtitle) : "+subNode2);
}
GetXMLData("VisitUser.xml");
</script>
</body>
</html>HTML文件和XML文件放在同一个目录中,用IIS测试即可,
function loadXMLDoc(fname){
var xmlDoc;
// code for IE
if (window.ActiveXObject) { xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}else{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}