Проблема сравнения строк в MSXML - PullRequest
1 голос
/ 17 декабря 2010

Может кто-нибудь объяснить, почему этот код JavaScript выводит ноль вместо единицы?Кроме того, когда элементы // e [2] и // e [3] меняются местами, тогда это работает, почему?

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);

1 Ответ

1 голос
/ 20 декабря 2010

Может кто-нибудь объяснить, почему это Код 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" 
...