2009-10-20 100 views
0

我試圖解析一個簡單的XML文件,但我無法獲得我需要的值。我收到的當前錯誤消息說節點不是一個對象或爲空。我正在測試I.E. 6,7,FF 2,3在JavaScript中解析XML文件時出錯

這裏的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

您的XPath返回: 這是您所期望的嗎? – dnagirl 2009-10-20 13:44:09

回答

1

我會用強烈建議做到這一點見http://www.w3schools.com/XPath/xpath_examples.asp庫,如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); 
} 

編輯:我沒那麼熟悉的XPath,所以我想我會解釋的情況下find()呼叫我誤解你想從XML選擇什麼。 jQuery使用CSS選擇器語法。因此,該find()將選擇具有key屬性等於myKeyadd節點,這些節點是appSettings的後代元素,後者元素從bookstore下降。

+0

感謝大家的幫助...... Matt,有什麼想法爲什麼它不適用於IE6? – Rod 2009-10-20 14:00:29

+0

沒關係,我認爲它被瀏覽器安全阻止,再次感謝您的幫助。 – Rod 2009-10-20 14:01:54

+0

我仍然建議你嘗試一下jQuery--它可以消除所有討厭的瀏覽器依賴(大部分),就像必須爲XMLHttpRequest進行對象檢測一樣。 – 2009-10-20 14:03:22

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

+0

@Reubens,很對。糾正。 – 2009-10-20 13:51:24

+0

你需要在哪裏xmlDoc.evaluate? – 2009-10-20 13:52:45

+1

*文檔* .evaluate()適用於支持DOM3的XPath瀏覽器 – 2009-10-20 13:54:36

0

只是爲了確保您的XML正確返回時,可以請你改變你的代碼:

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

alert(xmlDoc.xml) 

我懷疑你沒有得到你的XML數據從你的要求了。

0

在處理JavaScript之前,我會嘗試在瀏覽器中直接打開XML文檔,輸入URL並查看它是否正確顯示。