2010-12-17 2 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를 업데이트했습니다. 대소 문자를 구별하지 않고 검색하고 싶지만 문자열 비교 함수는 버그가있는 것처럼 보입니다. 세 번째와 네 번째 매개 변수를 원래대로 추가하지 않았습니다. 어느 것이 든 작동하지 않기 때문에 가능한 한 간단하게 샘플 코드를 유지하려고했습니다. – Mike

답변

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"