在JavaScript中解析XML文件时出错

时间:2009-10-20 13:41:31

标签: javascript xml xpath

我正在尝试解析一个简单的XML文件,但是我在尝试获取所需的值时遇到了麻烦。我得到的当前错误消息说节点不是对象或为空。我正在测试两个I.E. 6,7,FF 2,3

这是XML文件:

<bookstore>
  <appSettings>
    <add key="myKey" value="myTargetValue"/>
  </appSettings>
</bookstore>

这是我正在尝试使用的脚本:

<html>
  <head>
    <title></title>
  </head>
  <script type="text/javascript">
    if (window.XMLHttpRequest)
    {
      xhttp = new window.XMLHttpRequest()
    }
    else
    {
      xhttp = new ActiveXObject("Microsoft.XMLHTTP")
    }
    xhttp.open("GET","test.xml",false);
    xhttp.send("");
    xmlDoc=xhttp.responseXML;
    alert(xmlDoc.xml)

    var xpath = "/bookstore/appSettings/add[@key='myKey']";
    var node  = xmlDoc.selectSingleNode(xpath);
    alert(node.getAttribute("value"));    
  </script>
  <body>
  </body>
</html>

请指教。谢谢。

4 个答案:

答案 0 :(得分:1)

我强烈建议您使用jQuery这样的库来让您的生活更轻松 - 不再需要document.getElementById()!在jQuery中你可以这样做:

$.ajax({
    type: 'GET',
    url: 'test.xml',
    dataType: 'xml',
    success: processXml
});

function processXml(xml)
{
    xml = $(xml);
    var value = xml.find('bookstore appSettings add[key=myKey]').attr('value');
    alert(value);
}

编辑:我对XPath并不熟悉,所以我想我会解释find()调用,以防我误读了你想从XML中选择的内容。 jQuery使用CSS选择器语法。因此,find()将选择add属性等于key的{​​{1}}个节点,这些节点是myKey的后代元素,来自{{1}元素。

答案 1 :(得分:0)

评估你的Xpath的方法对于firefox来说是不正确的。

请参阅https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript有关在Firefox中使用XPath的简介。

另请参阅http://www.w3.org/TR/xpath了解XPath详细信息

对于您的示例,您需要

var node = xmlDoc.evaluate("/bookstore/appSettings/add[@key='myKey']", xmlDoc, null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;

有关如何在IE和Firefox中完成此操作,请参阅http://www.w3schools.com/XPath/xpath_examples.asp

答案 2 :(得分:0)

为了确保您的XML正确返回,请改变您的代码:

// ...
xhttp.send("");
xmlDoc=xhttp.responseXML;

alert(xmlDoc.xml)

我怀疑您没有从请求中获取XML数据。

答案 3 :(得分:0)

在处理JavaScript之前,我会尝试直接在浏览器中打开XML文档,输入URL并查看它是否正确显示。