2010-12-17 7 views
1

なぜこのJavaScriptコードが1ではなく0を出力するのか説明できますか?また、要素// 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

は、なぜあなたは '([!= 'C' @id]/R/E/E)を'、カウントを使用していませんか? –

+0

これは変ですが、WScript.Echo(doc.selectNodes( "/ r/e [e/@ id = 'c']/@ id))。しかし、動作します。 –

+0

@Alejandroと@Samuel Zhang:質問とxpathを更新しました。大文字と小文字を区別しない検索をしたいのですが、string-compare関数がバグだと思われます。元々は3番目と4番目のパラメータを追加していませんでした。なぜならどちらもうまくいかず、サンプルコードをできるだけシンプルに保つためでした。 – Mike

答えて

1

この JavaScriptコードの出力ではなく1の をゼロなぜ誰かが説明していただけますか?また、要素// 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"