Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html XSL:if测试未按预期工作_Html_Xml_Xslt_Xhtml - Fatal编程技术网

Html XSL:if测试未按预期工作

Html XSL:if测试未按预期工作,html,xml,xslt,xhtml,Html,Xml,Xslt,Xhtml,XML代码`: <xsl:for-each select="class/student"> ID: <xsl:value-of select="id"/><br/> Name: <xsl:value-of select="lastName"/>,<xsl:value-of select="firstName"/><br/> Date: <xsl:

XML代码`:

   <xsl:for-each select="class/student">
         ID:   <xsl:value-of select="id"/><br/>
           Name:  <xsl:value-of select="lastName"/>,<xsl:value-of select="firstName"/><br/>
          Date:  <xsl:value-of select="date"/><br/>
           Major: <xsl:if test="major[@Year > 2008]"> 
                    <xsl:value-of select="major"/> ,
                     declared in:  <xsl:value-of select="major[@Year]"/>    
                  </xsl:if><br/><br/>
          </xsl:for-each>
输出:

     <student>
    <id>1000001</id>
    <lastName>john</lastName>
    <firstName>Doe</firstName>
    <date format="d">08/25/2006</date>
    <major Year="2006">CS:BS</major>
  </student>
上面的xml代码只是实际xml代码的一个示例,有更多的“年份”值/元素

大家好

我只想选那些年数大于2008年的专业,因为某些原因我选错了


谢谢

您说“年”值/元素比显示的多,这可能是问题的关键所在。如果您的输入包含两个元素

ID: 1000001 Name: Doe,John Date-enrolled: August 25, 2006 Major: CS:BS , declared in: CS:BS 然后test=major/@Year>2008将返回true,因为有一个这样的元素,在XSLT1.0中,将输出2.0中的第一个选定元素,它将引发错误


将来,请尝试提供一个完整的样本样式表和源文档,以允许其他人重现该问题。如果您试图在不测试缩减版本是否存在问题的情况下缩减它,则很容易消除造成问题的实际根源功能。

问题在于您正在倒退。你需要选择你想要的东西,然后使用它。您正在检查您想要的东西是否存在,然后使用不太具体的东西

这将解决您的问题:

<major Year="2006">CS:BS</major>
<major Year="2009">CS:BS</major>
你使用

Major: 
<xsl:for-each select="major[@Year > 2008]">
  <br/>
  <xsl:value-of select="."/>, declared in: <xsl:value-of select="@Year"/>
</xsl:for-each>
<br/>
这也不正确。以下内容实际会输出一年的值:

<xsl:value-of select="major[@Year]"/>
我强烈建议在静态文本中使用或。当前在XSLT中添加文本的方法导致XSLT代码看起来非常混乱:

<xsl:value-of select="major/@Year"/>

为了能够提供帮助,我们确实需要看到更多的输入XML,以及足够的XSLT来重新创建问题,而不仅仅是一些被注释掉的XSLT。显示您的预期和实际输出也会有所帮助,因为说您得到了错误的输出有点含糊不清。非常感谢。刚刚添加了更多,谢谢!那更好。。。。尽管XSLT引用了XML中没有显示的类元素。另外,输出显示的是您现在获得的实际输出还是预期输出?我现在获得的实际输出,类只是xml文件的父节点。
<xsl:for-each select="class/student">
  <xsl:value-of select="concat('ID: ', id)"/>
  <br/>
  <xsl:value-of select="concat('Name: ', lastName, ',', firstName)"/>
  <br/>
  <xsl:value-of select="concat('Date: ', date)"/>
  <br/>
  <xsl:text>Major:</xsl:text>
  <xsl:for-each select="major[@Year > 2008]">
    <br/>
    <xsl:value-of select="concat(., ', declared in: ', @Year)"/>
  </xsl:for-each>
  <br/>
</xsl:for-each>