我正在尝试解析一个简单的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>
请指教。谢谢。
答案 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并查看它是否正确显示。