Html XSL:if测试未按预期工作
XML代码`: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:
<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>