<?xml version="1.0" encoding="ISO-8859-1" ?> 
- <!--   Copyright w3school.com.cn 
  --> 
- <!--  W3School.com.cn bookstore example 
  --> 
- <bookstore>
- <book category="children">
   <title lang="en">Harry Potter</title> 
   <author>J K. Rowling</author> 
   <year>2005</year> 
   <price>29.99</price> 
  </book>
- <book category="cooking">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
  </book>
- <book category="web" cover="paperback">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
  </book>
- <book category="web">
  <title lang="en">XQuery Kick Start</title> 
  <author>James McGovern</author> 
  <author>Per Bothner</author> 
  <author>Kurt Cagle</author> 
  <author>James Linn</author> 
  <author>Vaidyanathan Nagarajan</author> 
  <year>2003</year> 
  <price>49.99</price> 
  </book>
  </bookstore>这个是我的XML文件<script language="javascript">
function loadXML(XMLFile)
{
var XMLDoc;
if(window.ActiveXObject) //IE浏览器
{
alert('ie')
XMLDoc    = new ActiveXObject('Microsoft.XMLDOM');
XMLDoc.async    = false;
XMLDoc.load(XMLFile);
}
else if (document.implementation&&document.implementation.createDocument) //Firefox, Mozilla, Opera, etc 浏览器
{
alert('FF')
XMLDoc = document.implementation.createDocument('', '', null);
XMLDoc.load(XMLFile);
}
else
{
return null;
}

return XMLDoc;
}

function checkXMLDocObj(XMLFile)
{
var XMLDoc = loadXML(XMLFile);
if(XMLDoc==null)
{
alert('您的浏览器不支持XML文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');
window.location.href='#';
}

return XMLDoc;
}
var XMLDoc = checkXMLDocObj("book.xml");
alert(XMLDoc);
var x = XMLDoc.getElementsByTagName("bookstore/book/title");
alert(x.length);
var y = x.childNodes[0];
alert(y);
var z = y.nodeValue;
alert(z);
</script>这个是我的读取js它的js代码,我最后测试做了一下输出,我发现alert(XMLDoc)显示的是object ,alert(x.length);显示的是0,然后后面的输出根本不运行,请问下这是为什么?这里哪里有问题?我用的是IE浏览器,判断浏览器的输出没问题,以上代码是刚从网上搜到的,XML初学者,请各位尽量讲详细一点 谢谢~!

解决方案 »

  1.   

    try: alert(XMLDoc.documentElement)
      

  2.   

    var x = XMLDoc.getElementsByTagName("book");
      

  3.   

    试了,显示为空  null。
    但是我真找不到哪里错了,大家帮忙看看,谢谢
      

  4.   


    这个也不行,因为我刚输出alert(XMLDoc.documentElement) 测试的时候显示的是null是不是没获取到?
      

  5.   

    一.你的XML文件Copy的有问题多了-<?xml version="1.0" encoding="ISO-8859-1" ?> 
     <!--   Copyright w3school.com.cn 
      --> 
     <!--  W3School.com.cn bookstore example 
      --> 
     <bookstore>
     <book category="children">
          <title lang="en">Harry Potter</title> 
          <author>J K. Rowling</author> 
          <year>2005</year> 
          <price>29.99</price> 
      </book>
     <book category="cooking">
      <title lang="en">Everyday Italian</title> 
      <author>Giada De Laurentiis</author> 
      <year>2005</year> 
      <price>30.00</price> 
      </book>
     <book category="web" cover="paperback">
      <title lang="en">Learning XML</title> 
      <author>Erik T. Ray</author> 
      <year>2003</year> 
      <price>39.95</price> 
      </book>
     <book category="web">
      <title lang="en">XQuery Kick Start</title> 
      <author>James McGovern</author> 
      <author>Per Bothner</author> 
      <author>Kurt Cagle</author> 
      <author>James Linn</author> 
      <author>Vaidyanathan Nagarajan</author> 
      <year>2003</year> 
      <price>49.99</price> 
      </book>
      </bookstore>
    二.见代码解释<script language="javascript">
            function loadXML(XMLFile)
            {
                var XMLDoc;
                if(window.ActiveXObject)        //IE浏览器
                {
                    alert('ie')
                    XMLDoc    = new ActiveXObject('Microsoft.XMLDOM');
                    XMLDoc.async    = false;
                    XMLDoc.load(XMLFile);
                }
                else if (document.implementation&&document.implementation.createDocument)        //Firefox, Mozilla, Opera, etc 浏览器
                {
                    alert('FF')
                    XMLDoc = document.implementation.createDocument('', '', null);
                    XMLDoc.load(XMLFile);
                }
                else
                {
                    return null;
                }
                
                return XMLDoc;
            }
        
        function checkXMLDocObj(XMLFile)
        {
            var XMLDoc = loadXML(XMLFile);
            if(XMLDoc==null)
            {
                alert('您的浏览器不支持XML文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');
                window.location.href='#';
            }
            
            return XMLDoc;
        }
        var XMLDoc = checkXMLDocObj("book.xml");
        alert(XMLDoc);
        var x = XMLDoc.getElementsByTagName("bookstore/book/title");
        alert(x.length);
        var y = x[0].childNodes[0]; //上面的X取得是是一个数组 所以这里你可以用循环全给取出来
        alert(y);
        var z = y.nodeValue;
        alert(z);
        </script>
      

  6.   

    document.implementation.createDocument('', '', null); // 创建后未设置同步模式
    XMLDoc.getElementsByTagName("bookstore/book/title"); // 这句只有IE支持这样写
    <script language="javascript">
    function loadXML(XMLFile){
    var XMLDoc;
    if (window.ActiveXObject) {
    alert('ie')
    XMLDoc = new ActiveXObject('Microsoft.XMLDOM');
    XMLDoc.async = false;
    XMLDoc.load(XMLFile);
    } else if (document.implementation && document.implementation.createDocument) {
    XMLDoc = document.implementation.createDocument('', '', null);
    XMLDoc.async = false;
    XMLDoc.load(XMLFile);
    } else {
    return null;
    }

    return XMLDoc;
    }

    function checkXMLDocObj(XMLFile){
    var XMLDoc = loadXML(XMLFile);
    if (XMLDoc == null) {
    alert('您的浏览器不支持XML文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');
    window.location.href = '#';
    }
    return XMLDoc;
    }

    var XMLDoc = checkXMLDocObj("temp.xml");
    var x = XMLDoc.getElementsByTagName("title");
    var y = x[0];
    var z = y.firstChild.nodeValue;
    alert(z);
    </script>
      

  7.   

    感谢5楼的,问题已经解决了,我请问下XML你帮我改什么了? 除了每个节点之前的 “-”之外?
      

  8.   

    <?xml version="1.0" encoding="utf-8" ?> 
    <bookstore>
    <book category="children">
    <title lang="en">Harry Potter</title> 
    <author>J K. Rowling</author> 
    <year>2005</year> 
    <price>29.99</price> 
    </book>
    </bookstore>先这样试试var x = XMLDoc.getElementsByTagName("book"); 
      

  9.   

    这个也不行,因为我刚输出alert(XMLDoc.documentElement) 测试的时候显示的是null是不是没获取到?多半是book.xml格式那里有错
      

  10.   

    楼主刚才我没给看FF,刚才看了一下 你可以看下6楼兄弟的参考.
    我总结下你的错误
    一.你的XML文件就是COPY多了个- .XML格式比较严格.
    二.
    var x = XMLDoc.getElementsByTagName("bookstore/book/title"); // 这样只有IE可以
    var x = XMLDoc.getElementsByTagName("title");  // 这样才是正确的三.在FF下的分支 你没有设置同步.XMLDoc.async = false;
    四.var x = XMLDoc.getElementsByTagName("title"); 是一个数组 所以要在这基础上取值用x[i].**
    ----
    book.xml就是我刚才改的.js代码如下
    <script language="javascript">
            function loadXML(XMLFile)
            {
                var XMLDoc;
                if(window.ActiveXObject)        //IE浏览器
                {
                    XMLDoc    = new ActiveXObject('Microsoft.XMLDOM');
                    XMLDoc.async  = false;
                    XMLDoc.load(XMLFile);
                }
                else if (document.implementation&&document.implementation.createDocument)        //Firefox, Mozilla, Opera, etc 浏览器
                {
                    XMLDoc = document.implementation.createDocument('', '', null);
     XMLDoc.async  = false;
                    XMLDoc.load(XMLFile);
                }
                else
                {
                    return null;
                }
                
                return XMLDoc;
            }
        
        function checkXMLDocObj(XMLFile)
        {
            var XMLDoc = loadXML(XMLFile);
            if(XMLDoc==null)
            {
                alert('您的浏览器不支持XML文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');
                window.location.href='#';
            }
            
            return XMLDoc;
        }
        var XMLDoc = checkXMLDocObj("book.xml");
        alert(XMLDoc);
        var x = XMLDoc.getElementsByTagName("title");
        var y = x[0].childNodes[0];
        var z = y.nodeValue;
        alert(z);
        </script>