2013-03-25 5 views
3

xml 내에서 문자열을 검사하는 다음과 같은 사항이 있습니다. 그러나 변수 내에서 Null 또는 텍스트가 없는지 확인하려면 다른 테스트를 만들어야합니다. $validItems 줄 ...'Null'에 대한 XSLT/XPath 테스트

<xsl:if test="$validItems[(Caption | CalltoAction)[string(.)]]"> 
<div class="text"> 
    <xsl:choose> 
    <xsl:when test="$horizontal"> 
     <div class="holder"> 
     <div class="frame"> 
      <div class="slides-descriptions"> 
      <xsl:apply-templates select="$validItems" mode="horizontal"/> 
      </div> 
      <div class="switcher"/> 
     </div> 
     </div> 
    </xsl:when> 
    <xsl:otherwise> 
     <div class="slides-descriptions"> 
     <xsl:apply-templates select="$validItems" mode="vertical"/> 
     </div> 
     <div class="switcher"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</div> 
</xsl:if> 

변수 xsl : testing = $ validItems을 테스트하는 방법은 무엇입니까?

+2

'xsl : if test = "not ($ validItems)"'시도해 보셨습니까? 아니면 http://www.w3.org/TR/xpath/#section-Boolean-Functions를 읽으셨습니까? – Istao

+1

당신이하고 싶은 것이 명확하지 않습니다. "변수 $ validItems에서 'Null'또는 텍스트가 없는지 검사하는 또 다른 테스트 -'$ validItems '에있는 요소 중 * any *에 텍스트 값이있는'Caption' 또는'CalltoAction' 자식 요소가 있는지 확인하려고합니까? 빈 문자열입니까? 사실, XSLT에는 "null"과 같은 것이없고 빈 문자열/노드 집합/시퀀스 만 존재합니다. – LarsH

+0

$ validItems 내에서 캡션 | CalltoAction 내에 텍스트가없는 것을보고 싶습니다. 텍스트가 없으면 조건이 필요합니다. 문자열에 텍스트가없는 경우 필터링 방법 만 찾고 있습니다. – MizAkita

답변

6

난 당신이 요구하는지 이해한다면 ,

<xsl:if test="$validItems[(Caption | CalltoAction)[not(string(.))]]"> 

는 그것을 할 것입니다. 즉, "문자열 값이 비어있는 Caption 또는 CalltoAction 자식 요소가있는 $ validItems 노드 집합에 요소가있는 경우"입니다. 당신도 말할 수 있습니다

<xsl:if test="$validItems[(Caption | CalltoAction)[. = '']]"> 
+0

고맙습니다. LarsH ... 그게 다야! [not (string (.))] – MizAkita

5

XPath 데이터 모델에는 "Null"과 같은 것이 없습니다.

"변수 $ validItems 내에 텍스트가 없습니다"와 같이이 변수의 유형을 아는 데 도움이됩니다. 단일 요소 노드 (표시된 코드 샘플에서 볼 수있는 것처럼)이고 테스트하려는 노드에 텍스트 노드 하위 노드가없는 경우 테스트는 not($ValidItems/text())이됩니다. 텍스트 노드 자손이 없음을 테스트하려면 not(string($validItems)) 또는 동일하게 $validItems=''을 시도하십시오.

관련 문제