2013-03-25 59 views
3

我有以下检查xml中的字符串...但是,我需要创建另一个测试来检查变量$validItems在第1天的'空'或没有文本行...'空'的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:if test = $ validItems?

+2

您是否尝试过'xsl:if test =“not($ validItems)”'或阅读http://www.w3.org/TR/xpath/#section-Boolean-Functions? – Istao 2013-03-25 17:58:56

+1

目前还不清楚你想要做什么。 “在$ validItems变量中检查'Null'或没有文本的另一个测试” - 您想检查'$ validItems'中的任何*元素是否有'Caption'或'CalltoAction'子元素,其文本值是一个空字符串?顺便说一句,在XSLT中没有真正的“null”,只是空的字符串/节点集/序列。 – LarsH 2013-03-25 18:28:38

+0

我想查看$ validItems内的Caption | CalltoAction内没有文本。如果找不到文本,我需要条件。我只想找出如何在字符串中没有文本时进行过滤。 – MizAkita 2013-03-25 18:56:22

回答

6

如果我明白你问什么,

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

将做到这一点。换句话说,“如果$ validItems节点集中有一个元素具有其字符串值为空的Caption或CalltoAction子元素”。你也可以说

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

谢谢拉斯赫......就是这样! [不(串(。))] – MizAkita 2013-03-25 20:49:33

5

在XPath数据模型中没有“Null”这样的事情。

至于“变量$ validItems中没有文本”,这将有助于了解此变量的类型。如果它是单个元素节点(可能出现在您展示的代码示例中),并且您要测试的是它没有文本节点子节点,则测试将为not($ValidItems/text())。如果要测试它没有文本节点后代,请尝试使用not(string($validItems))或等效地使用$validItems=''