使用JS查找XML内部节点与属性值

最近做项目,使用js对xml进行解析,其中需要对传入的值在xml中进行查询,从而查找具有此属性节点的其余属性,上网查了一下,引用xml两种不同模式,分别做说明,直接上代码:

xml.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="开始查找" οnclick="byname()"><br>
按价格查找:<input type=text name="bookprice">
<input type=button value="开始查找" οnclick="byprice()"><br>
按作者查找:<input type=text name="bookauthor">
<input type=button value="开始查找" οnclick="byauthor()"><br>
自定义查找:<input type="text" name="bid" id="bid">
<input type="button" value="开始查找" οnclick="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,野人献曝,希望对需要的同志有所帮助;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值