2017-03-26 66 views
0

我正在尝试制作一个允许用户输入搜索xml文件的网页。有多个输入,但是当提交搜索时我无法容纳空输入。默认情况下用xsl:when测试时返回所有元素?

var date = rDateSearch.value; 
if (date === "") {   
    var datein = "date=*"; 
} 
else { 
    var datein = "date=" + date"; 
} 

'date'变量然后被发送到xsl:when测试。我想xsl:when返回所有日期值。

有没有办法做到这一点?我目前的想法不起作用。

这是我的xml样本:

<record> 
    <name>John Smith</name> 
    <date>1972</date> 
    <rating>0.5</rating> 
</record> 

,这是我的XSL。我不确定这段代码是否合适。

<xsl:for-each select="records/record"> 
    <xsl:choose> 
     <xsl:when test ="name=*"> 
      <xsl:choose> 
       <xsl:when test ="date=*"> 
        <xsl:choose> 
         <xsl:when test ="rating=*"> 
          <tr> 
           <td><xsl:value-of select="name"/></td> 
           <td><xsl:value-of select="date"/></td> 
           <td><xsl:value-of select="rating"/></td> 
          </tr> 
         </xsl:when> 
        </xsl:choose> 
       </xsl:when> 
      </xsl:choose> 
     </xsl:when> 
    </xsl:choose> 
</xsl:for-each> 
+0

如果您发布了XSL,以显示正在应用'xsl:choose'时的上下文将会有所帮助。了解XML的外观也很有帮助。如果不知道如何应用这个,那么当没有'date'的值时,返回'true()'的表达式怎么样,以便所有东西都通过'xsl:when'的@test标准呢? –

+0

感谢您的帮助,我已根据要求添加了样品。 – grainman

+0

那么,你动态地构造你的XSLT,代替什么被分配给变量'datein',你现在有'xsl:when test =“date = *”'? –

回答

2

如果用户没有指定的值来过滤名称,日期,或等级,而你试图找出什么表情会选择任何/所有,你既可以使用:

xsl:when test="date" 

只要在xsl:for-each中正在评估record元素中存在date元素,它将“通过”测试。

或者,你可以使用:

xsl:when test="true()" 

这将评估为真,无论是否有日期元素。

相同的逻辑适用于其他元素。

+0

谢谢你的帮助! – grainman

相关问题