2010-08-29 27 views
5

我正在嘗試使用xpath查詢來查找xml節點。但我無法讓它工作。在Firefox中,結果總是「未定義」,而chrome拋出錯誤代碼。xpath與dom文件

<script type="text/javascript"> 

var xmlString = '<form><name>test</name></form>'; 
var doc = new DOMParser().parseFromString(xmlString,'text/xml'); 

var result = doc.evaluate('/form/name', doc, 
          null, XPathResult.ANY_TYPE, null); 

alert(result.stringValue); 

</script> 

這段代碼有什麼問題?

+0

的一些更詳細的解釋試試'// form/name' – 2010-08-29 21:11:57

回答

5

我不知道你爲什麼得到這個錯誤,但你可以將XPathResult.ANY_TYPE更改爲XPathResult.STRING_TYPE,並且可以工作(在firefox 3.6中測試)。

參見:

var xmlString = '<form><name>test</name></form>'; 
var doc = new DOMParser().parseFromString(xmlString,'text/xml'); 
var result = doc.evaluate('/form/name', doc, null, XPathResult.STRING_TYPE, null); 
alert(result.stringValue); // returns 'test' 

jsfiddle


詳情:

方法evaluate的第四個參數是你指定你需要什麼樣的結果(reference)一個整數。有很多types,作爲整數,字符串和任何類型。此方法返回一個XPathResult,它具有許多屬性。

您必須將屬性(numberValue,stringValue)與evaluate中使用的屬性進行匹配。

我只是不明白爲什麼any type沒有與string value一起使用。

2

XPathResult.ANY_TYPE會返回爲xpath表達式設置的節點/form/name,因此result.stringValue將無法​​將節點集轉換爲字符串。在這種情況下,你可以使用result.iterateNext().textContent

然而,像count(/form/name)的表達XPathResult.ANY_TYPE使用時會返回一個數字值,你可以使用result.numberValue檢索在這種情況下的數量。

https://developer.mozilla.org/en/DOM/document.evaluate#Result_types