在JavaScript中分析XML文件时出错

在JavaScript中分析XML文件时出错,javascript,xml,xpath,Javascript,Xml,Xpath,我试图解析一个简单的XML文件,但在获取所需的值时遇到了困难。我收到的当前错误消息说节点不是对象或为null。我正在测试两个,即6、7、FF 2、3 以下是XML文件: <bookstore> <appSettings> <add key="myKey" value="myTargetValue"/> </appSettings> </bookstore> 以下是我尝试使用的脚本: <html> &

我试图解析一个简单的XML文件,但在获取所需的值时遇到了困难。我收到的当前错误消息说节点不是对象或为null。我正在测试两个,即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>

if(window.XMLHttpRequest)
{
xhttp=newwindow.XMLHttpRequest()
}
其他的
{
xhttp=新的ActiveXObject(“Microsoft.XMLHTTP”)
}
open(“GET”,“test.xml”,false);
xhttp.send(“”);
xmlDoc=xhttp.responseXML;
警报(xmlDoc.xml)
var xpath=“/bookstore/appSettings/add[@key='myKey']”;
var node=xmlDoc.selectSingleNode(xpath);
警报(node.getAttribute(“值”);

请告知。谢谢。

对于firefox,评估Xpath的方法不正确

有关在firefox中使用XPath的详细介绍,请参阅

有关XPath的详细信息,请参见

例如,您需要

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

查看如何在IE和firefox中实现这一点,我强烈建议使用jQuery这样的库来简化您的生活-不要再使用
document.getElementById()
-ing!在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);
}

Edit:我对XPath不太熟悉,所以我想我应该解释一下
find()
调用,以防我误读您试图从XML中选择的内容。jQuery使用CSS选择器语法。因此,
find()
将选择
add
节点,这些节点的
key
属性等于
myKey
,它们是
appSettings
元素的后代元素,从
bookstore
元素派生而来。

为了确保XML正确返回,请更改代码:

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

alert(xmlDoc.xml)

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

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

您的XPath返回:这是您所期望的吗?哪里需要xmlDoc.evaluate?document.evaluate()是为DOM3 XPath支持浏览器感谢大家的帮助。。。Matt,你知道为什么它不能在IE6上工作吗?没关系,我认为它被我的浏览器安全性阻止了,再次感谢你的帮助。我仍然建议你试试jQuery——它消除了所有讨厌的浏览器依赖性(大部分情况下),比如必须对XMLHttpRequest进行对象检测。