最近做项目,使用js对xml进行解析,其中需要对传入的值在xml中进行查询,从而查找具有此属性节点的其余属性,上网查了一下,引用xml两种不同模式,分别做说明,直接上代码:
1.html: <html> <script> function createXML(){ var xmlVersion=["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDoc"]; for(var i=0;i<xmlVersion.length;i++){ try{ var xmlDoc=new ActiveXObject(xmlVersion[i]); return xmlDoc; }catch(Exception){ //不处理 } } throw new Error("系统没有安装MSXML"); } var xmldoc=createXML(); xmldoc.async=false; xmldoc.load("2.xml"); function byname(){ var temp=""; var str=document.all.bookname.value; var reg="/bookstore/book[name='"+str+"']"; var target=xmldoc.documentElement.selectNodes(reg); alert("查询长度为:"+target.length); if(target.length==0){ alert("没有找到与此匹配的书名"); }else{ for(var i=0;i<target.length;i++){ temp+="书名:"+target[i].childNodes[0].text+"<br>"; temp+="价格:"+target[i].childNodes[1].text+"<br>"; temp+="作者:"+target[i].childNodes[2].text+"<br>"; } document.getElementById("sp").innerHTML=temp; } } function byprice(){ var temp=""; var str=document.all.bookprice.value; var reg="/bookstore/book[price<"+str+"]"; var target=xmldoc.documentElement.selectNodes(reg); if(target.length==0){ alert("没有找到与此匹配的书名"); }else{ for(var i=0;i<target.length;i++){ temp+="书名:"+target[i].childNodes[0].text+"<br>"; temp+="价格:"+target[i].childNodes[1].text+"<br>"; temp+="作者:"+target[i].childNodes[2].text+"<br>"; } document.getElementById("sp").innerHTML=temp; } } function byauthor(){ var temp=""; var str=document.all.bookauthor.value; var reg="/bookstore/book[author='"+str+"']"; var target=xmldoc.documentElement.selectNodes(reg); if(target.length==0){ alert("没有找到与此匹配的书名"); }else{ for(var i=0;i<target.length;i++){ temp+="书名:"+target[i].childNodes[0].text+"<br>"; temp+="价格:"+target[i].childNodes[1].text+"<br>"; temp+="作者:"+target[i].childNodes[2].text+"<br>"; } document.getElementById("sp").innerHTML=temp; } }
function byBid() { var tmep = ""; var str= document.getElementById("bid").value; var reg = "/bookstore/shape[text()="+str+"]"; //注意此处Xpath设置与以上不同 var tar = xmldoc.documentElement.selectNodes(reg); alert("查询长度为:"+tar.length);
for(var i=0;i<tar.length;i++) { var sss = tar[i].getAttribute("value"); alert(sss); } } </script> <body> <center> 按书名查找:<input type=text name="bookname"> <input type=button value="开始查找" onclick="byname()"><br> 按价格查找:<input type=text name="bookprice"> <input type=button value="开始查找" onclick="byprice()"><br> 按作者查找:<input type=text name="bookauthor"> <input type=button value="开始查找" onclick="byauthor()"><br> 自定义查找:<input type="text" name="bid" id="bid"> <input type="button" value="开始查找" onclick="byBid()"><br> <span id="sp"></span> </center> </body> </html>
2.xml: <?xml version="1.0" encoding="gb2312" standalone="yes"?> <bookstore> <book> <name>三国演义</name> <price>350.00</price> <author>陶清华</author> </book> <book> <name>西游记</name> <price>450.00</price> <author>郭勇</author> </book> <shape id="2" name="video_pt" value="视频表">23</shape> <shape id="3" name="asj_pt" value="案事件表">322</shape> </bookstore>
注意,此处应用两种不同表现的xml模式,分别使用不同的Xpath,野人献曝,希望对需要的同志有所帮助。 |