'Null'的XSLT/XPath测试

Miz*_*ita 4 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>
Run Code Online (Sandbox Code Playgroud)

我将如何测试变量xsl:if test = $ validItems?

Lar*_*rsH 7

如果我明白你的要求,

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

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

<xsl:if test="$validItems[(Caption | CalltoAction)[. = '']]">
Run Code Online (Sandbox Code Playgroud)


Mic*_*Kay 6

XPath数据模型中没有"Null"这样的东西.

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