问题说明:
刚刚学习DOM解析XML,现在想做个查询的功能,根据日期来查询同一节点中的另外一个节点的值。请大侠们指点一二,我对遍历节点和找节点弄不好。感谢!!JS代码:
var curNode;
var xmlDoc = new ActiveXObject( "Msxml2.DOMDocument" );
xmlDoc.async = false;
xmlDoc.load("daily.xml");
if (xmlDoc.parseError.errorCode != 0) {
var myErr = xmlDoc.parseError;
document.write("You have error " + myErr.reason);
}
else
{ curNode = xmlDoc.documentElement.childNodes;
      
//      for(var i=0;i<curNode.childNodes.length;i++)
// {
// //document.getElementById("test").innerHTML="hahaha"
//        for(var j=0;j<curNode.childNodes[i].length;j++){
//        var tagdate = curNode.childNodes[i].Value;
// if(tagdate=="2009.9.9"){
// alert("right");
// }
// }
// }
return true;
}XML文件:
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<daily id='1'>
<date>2009.09.08</date>
<title>title1</title>
<cont>cont4</cont>
</daily>
<daily id='2'>
<date>2009.09.09</date>
<title>title2</title>
<cont>cont2</cont>
</daily>
</ROOT>

解决方案 »

  1.   

    JQeury实现:
    XML为XML格式数据
    $(XML).find("ROOT").find("daily").each(function(i){
    //这里可以遍历出所有daily数据;
    alert($(this).find("date"));
    });
      

  2.   


    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
        <title> </title> 
        <style>     </style>
        <script>
            var xmlReportData=null
            function XMLload(){
                xmlReportData = new ActiveXObject("Microsoft.XMLDOM");
                xmlReportData.async = "false";
                xmlReportData.onreadystatechange = function(){
                    if ( xmlReportData.readyState != 4){
                        return;
                    }else{
                        var node=findNodeValue(xmlReportData.documentElement,"2009.09.09");  //在这里设置你的时间
                        for(var i=0;i<node.childNodes.length;i++){
                           alert(node.childNodes[i].text);
                        }
                    }
                };
                xmlReportData.load( "test.xml" );
            }
            function findNodeValue(pnode,date){
                var node;
                var snode;
                for(var i=0;i<pnode.childNodes.length;i++){
                    node=pnode.childNodes[i];
                    if(node.nodeName=="daily"){
                         for(var j=0;j<node.childNodes.length;j++){
                             snode=node.childNodes[j];
                             if(snode.nodeName=="date"){
                                 if(snode.text==date)
                                 return node;
                             }
                         }
                    }
                }
            }
            window.onload=function(){
    XMLload();
            }
        </script>
    </head> 
    <body> </body> 
    </html>
    test.xml<?xml version="1.0" encoding="utf-8"?> 
    <ROOT> 
        <daily id='1'>
            <date>2009.09.08 </date>
            <title>title1 </title>
            <cont>cont4 </cont>
        </daily>
        <daily id='2'>
            <date>2009.09.09 </date>
            <title>title2 </title>
            <cont>cont2 </cont>
        </daily>
    </ROOT> 
      

  3.   

    改变文本节点得值xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc .getElementsByTagName("title")[0].childNodes[0];
    x.nodeValue="Easy Cooking";改变属性的值xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc .getElementsByTagName("book");
    x[0].setAttribute("category","food");删除元素节点xmlDoc = loadXMLDoc("books.xml");
    y = xmlDoc.getElementsByTagName("books")[0];
    xmlDoc.documentElement.removeChild(y);删除自身xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc.getElementsByTagName("book")[0];
    x.parentNode.removeChild(x);删除文本节点xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc.getElementsByTagName("title")[0];
    y = x.childNodes[0];
    x.removeChild(y);清空文本节点xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc.getElementsByTagName("title")[0];
    x.nodeValue = "";根据名称删除属性节点xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc.getElementsByTagName("book");
    x[0].removeAttribute(category);根据对象删除属性节点xmlDoc = loadXMLDoc("books.xml");
    x = xmlDoc.getElementsByTagName("book");
    for(var i=0;i<x.length;i++){
           while(x[i].attributes.length>0){
                    attnode=x[i].attributes[0];
                    old_att=x[i].removeAttribtueNode(attnode);
           }
    }
    x[0].removeAttribute(category);
      

  4.   

    谢谢大家,我明白了
    BeenZ 很强大 循环输出了那几个节点的值 谢谢