假设我在xml文件中有以下内容:
<student name="bob">
<grades exam1="98" exam2="53"/>
<status>GOOD</status>
</student>
在我的xslt中我有类似的东西:
<xsl:choose>
<xsl:when test="(student/status[text()='GOOD']) and not(student/grades/@exam1)">
<!--passed code here-->
</xsl:when>
<xsl:otherwise>
<!--otherwise code here-->
</xsl:choose>
现在有条件的第一部分工作(即检查状态是否良好)但第二部分没有(即检查学生是否没有考试成绩1)所以进入&#34;在这里传递代码&#34;我只想看看那些有以下内容的学生:
<student name="mary">
<grades exam2="53"/>
<status>GOOD</status>
</student>
所以成绩下没有exam1属性。我真的不知道我在上面给出的条件陈述中做错了什么。
感谢任何帮助。
答案 0 :(得分:0)
使用以下文件:
<root>
<student name="bob">
<grades exam1="98" exam2="53"/>
<status>GOOD</status>
</student>
<student name="mary">
<grades exam2="53"/>
<status>GOOD</status>
</student>
</root>
这两个模板将匹配其中一个。这比在整个地方使用xsl:choose
更好。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/root/student[status='GOOD' and grades/@exam1]">
asdf
</xsl:template>
<xsl:template match="/root/student[status='GOOD' and not(grades/@exam1)]">
fdsa
</xsl:template>
</xsl:transform>
这导致:
asdf
fdsa