2010-12-17 67 views
1

有人可以解釋爲什麼這個JavaScript代碼輸出零而不是一個?另外,當元素// e [2]和// e [3]被交換時,它會起作用,爲什麼?MSXML字符串比較問題

doc = new ActiveXObject("MSXML2.DOMDocument.4.0"); 
doc.loadXML(
"<r>    " + 
" <e id='a'>  " + 
"  <e id='b'/> " + 
"  <e id='c'/> " + 
" </e>   " + 
"</r>    ") 
doc.setProperty("SelectionNamespaces", "xmlns:ms='urn:schemas-microsoft-com:xslt'"); 
WScript.Echo(doc.selectNodes("/r/e[ms:string-compare(e/@id,'c','en-US', 'i')=0]/@id").length); 
+0

你爲什麼不使用'計數(/ R/E/E [@id = 'C'!])'? – 2010-12-17 22:21:55

+0

這很奇怪,但是WScript.Echo(doc.selectNodes(「/ r/e [e/@ id ='c']/@ id」)。length);雖然工作。 – 2010-12-19 14:43:04

+0

@Alejandro和@Samuel Zhang:我更新了問題和xpath。我想做一個不區分大小寫的搜索,但看起來字符串比較函數是buggy。我原來並沒有添加第三和第四個參數,因爲它無法以任何方式工作,我想盡可能簡化示例代碼。 – Mike 2010-12-19 23:19:57

回答

1

是否有人可以解釋爲什麼這 JavaScript代碼輸出零而不是一個 ?另外,當元素// e [2]和 // e [3]被交換時,它會起作用,爲什麼?

因爲你的擴展功能的企業是

number ms:string-compare(string x, string y, [,string language _ 
              [,string options]]) 

所以,計算爲一個節點集中e/@id內最表達式轉換爲字符串以節點集中的第一個節點。

沒有擴展,你可以使用:

/r/e[e/@id[translate(.,'C','c')='c']]/@id"