2012-07-18 2 views
1

이것은 매우 간단하다고 생각합니다. 그렇다면 더 복잡 할 수 있습니다.비교에서 오답 받기 XSL

어쨌든, 내가 관련성이 있다고 생각하는 코드를 포함 시키면 더 많은 것이 관련성이 있다고 생각하면 더 많이 포함하려고합니다.

내가 두 개의 문을 가지고 :

<xsl:value-of select="$isOnlineColumnEmpty" /> 
<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" /> 

첫 번째는 false를 출력합니다. 그러나 두 번째 것은 사실을 출력하는 것이며, 이는 내가 예상 한 것과 반대입니다.

이 외에도이 두 문장은 여러 번 반복되며 한 섹션에서만이 결과를 얻습니다. 그러나이 두 문 사이에는 코드가 전혀 없으므로 변수의 값을 변경할 수있는 코드는 없습니다.

제가 간과 할 수있는 것이 있는지 궁금합니다.

답변

0

그럼, 나중에 알아 냈습니다.

에 문을 변경 :

<xsl:value-of select="$isOnlineColumnEmpty != false" /> 

나를 위해 문제가 해결되었습니다.

1

대신 :

<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" /> 

사용 :

<xsl:value-of select="not($isOnlineColumnEmpty = false())" /> 

설명는 :

부울 값false() 솜입니다 문자열과 다른 문자"false"

부울을 다른 값과 비교하면 두 번째 값이 부울로 변환 된 다음 비교가 수행됩니다.

"비교하는 적어도 하나의 오브젝트가 부울 인 경우 는, 각 부울로 변환되어 비교 될 객체처럼 부울 기능을 적용하여."XPath 1.0 W3C Specification 인용하기

따라서이 구체적인 경우에는 "false" 문자열이 부울로 변환됩니다. 비어있는 문자열의 경우 boolean($someString)true()입니다.

따라서 변환 후 두 개의 부울 값 false()true()을 비교하면 결과는 false()입니다. 원래 표현식에서이 결과는 not() 함수의 인수이므로 not(false()) 인 즉 true()입니다.

not($isOnlineColumnEmpty = 'false') ==> not(false() = 'false') ==> 

not(false() = boolean(false())) ==> not(false() = true()) ==> 

not(false()) ==> true() 
+0

매우 유용 않음 ​​: 여기

는 계산 체인이다. 변수가 실제로 부울이 아닌 방식으로 수행 되었기 때문에 제 경우에는 작동하지 않습니다. 그러나 도움이되는 것보다 적은 것, 그리고 분명히 일을하는 올바른 방법. –

+0

@ ArakTai'Roth : 안녕하세요. –