5

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

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

4

3 回答 3

7

如果我明白你的要求,

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

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

<xsl:if test="$validItems[(Caption | CalltoAction)[. = '']]">
于 2013-03-25T20:11:18.393 回答
6

XPath 数据模型中不存在“Null”之类的东西。

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

于 2013-03-25T20:37:52.803 回答
0

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

string-length(string(/path/to/node)) = 0

我已经在日期和数字上对此进行了测试。

于 2018-06-09T03:31:48.197 回答