源码贴上
接受字符串:
          "<?xml version="1.0" encoding="utf-8"?>\r\n<ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">\r\n <Stu>\r\n <Name>1</Name>\r\n <Num>2</Num>\r\n </Stu>\r\n <Stu>\r\n <Name>1</Name>\r\n <Num>2</Num>\r\n </Stu>\r\n</ArrayOfStu>"
JS代码:
  
        //FF解析XML字符串器
        var parser = new DOMParser();
        var xml_dom = parser.parseFromString(strXML, "text/xml");
        xmlDoc = document.implementation.createDocument("", "", null);
        //都不用异步
        xmlDoc.async = false;
        xmlDoc = xml_dom;        var oEvaluator = new XPathEvaluator();
        
        //命名空间解析器
        var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);
        
        var oResult = oEvaluator.evaluate('//Name',
                                          xmlDoc.documentElement,
                                          resolver,
                                          XPathResult.ORDERED_NODE_ITERATOR_TYPE,
                                          null);
        if (oResult != null) {
            var oElement = oResult.iterateNext();
            while (oElement) {
                alert(oElement.tagName);
                oElement = oResult.iterateNext();
            }
        }
我想可能是命名空间问题 我加上了命名空间解析器 
可是oResult.iterateNext(); 为什么返回的总是NULL
我哪里错了?  

解决方案 »

  1.   

    我是使用AJAX调用一WEB服务   WEB服务返回在界面上的字符串为  
      <?xml version="1.0" encoding="utf-8" ?> 
    - <ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
    - <Stu>
      <Name>1</Name> 
      <Num>2</Num> 
      </Stu>
    - <Stu>
      <Name>1</Name> 
      <Num>2</Num> 
      </Stu>
      </ArrayOfStu>
      

  2.   

    等待 高手  我搞了一下午 没搞定  始终为NULL
      

  3.   

    var strXML = '<?xml version="1.0" encoding="utf-8"?><ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ><Stu><Name>1</Name><Num>2</Num></Stu><Stu><Name>1</Name><Num>2</Num></Stu></ArrayOfStu>';
    var parser = new DOMParser();
    var xml_dom = parser.parseFromString(strXML, "text/xml");
    //var xmlDoc = document.implementation.createDocument("", "", null);//都不用异步
    //xmlDoc.async = false;
    xmlDoc = xml_dom;var oEvaluator = new XPathEvaluator();//命名空间解析器
    var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);var oResult = oEvaluator.evaluate('//Name',
    xmlDoc,
    resolver,
    XPathResult.ANY_TYPE,
    null);
    if (oResult != null) {
    var oElement = oResult.iterateNext();
    alert(oElement);
    while (oElement) {
    alert(oElement.tagName);
    oElement = oResult.iterateNext();
    }
    }虽然觉得很奇怪,但是XPath似乎无法读取默认命名空间
    xmlns="http://tempuri.org/"去掉就正常了
      

  4.   

    4楼: 我这边是通过ASP.NET 的WEB服务发布的  一定要有默认命名空间的   
    我该使用这样 
    ar oResult = oEvaluator.evaluate(XPath,
                                              strXML,
                                              nsResolver,
                                              XPathResult.ORDERED_NODE_ITERATOR_TYPE,
                                              null);
            if (oResult != null) {
                var oElement = oResult.iterateNext();
                while (oElement) {
                    alert(oElement.tagName);
                    oElement = oResult.iterateNext();
                }
            }
        }
    }function nsResolver(prefix) {
        // 命名空间的名称/URI对
        switch (prefix) {
            case "xsi": return "http://www.w3.org/2001/XMLSchema-instance";
            case "xsd": return "http://www.w3.org/2001/XMLSchema";
            default: return "http://tempuri.org/";
        }   
    }   还是无解  
    继续等待高手
      

  5.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title><head>
    <script type="text/javascript">window.onload = function() {
    var strXML = '<?xml version="1.0" encoding="utf-8"?><ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"><Stu><Name>1</Name><Num>2</Num></Stu><Stu><Name>1</Name><Num>2</Num></Stu></ArrayOfStu>';


    var parser = new DOMParser();
    var xml_dom = parser.parseFromString(strXML, "text/xml");
    //var xmlDoc = document.implementation.createDocument("", "", null);

    //都不用异步
    //xmlDoc.async = false;
    xmlDoc = xml_dom;

    var oEvaluator = new XPathEvaluator(); function resolver(prefix) {
      // 命名空间的名称/URI对
      switch (prefix) {
      case "xsi": return "http://www.w3.org/2001/XMLSchema-instance";
      case "xsd": return "http://www.w3.org/2001/XMLSchema";
      default: return "http://tempuri.org/";
      }   
    }   

    //命名空间解析器
    //var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);

    var oResult = oEvaluator.evaluate('//ns:Name',
    xmlDoc,
    resolver,
    XPathResult.ANY_TYPE,
    null);

    if (oResult != null) {
    var oElement = oResult.iterateNext();
    alert(oElement);
    while (oElement) {
    alert(oElement.tagName);
    oElement = oResult.iterateNext();
    }
    }
    }
    </script></head>
    </html>即使是默认命名空间,仍然需要定义名字。
    你这里用了default,那么随便加个ns:,即可取得