'Null'的XSLT / XPath测试

时间:2013-03-25 16:55:07

标签: xml xslt xpath

我有以下内容检查xml中的字符串...但是,我需要创建另一个测试来检查第一行变量$validItems中的'Null'或没有文本...

<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?             

3 个答案:

答案 0 :(得分:6)

如果我理解你的要求,

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

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

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

答案 1 :(得分:5)

XPath数据模型中没有“Null”这样的东西。

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

答案 2 :(得分:0)

这些答案都不适用于我,我不知道它是否因为我通过ODK xforms使用xpath。我确实使用这个解决方案:

echo 4 > /sys/fs/cgroup/cpu/docker/${ContainerID}/cpu.shares

我已根据日期和数字对此进行了测试。