我试图想一个XSL片段,它会检查一个班级是否所有学生都有相同的姓氏.是的,那么(做任何事情)打印“所有的姓氏都是相同的”否则打印“所有的姓氏都不一样”. 什么打印真的没关系.我
什么打印真的没关系.我只是想为它找到合适的逻辑.
这是我的示例XML:
<root> <class name="Physics"> <student> <firstname>John</firstname> <lastname>Doe</lastname> <age>21</age> </student> <student> <firstname>Mary</firstname> <lastname>Doe</lastname> <age>21</age> </student> <student> <firstname>Ralph</firstname> <lastname>Doe</lastname> <age>21</age> </student> </class> <class name="Math"> <student> <firstname>John</firstname> <lastname>Doe</lastname> <age>21</age> </student> <student> <firstname>Mary</firstname> <lastname>Doe</lastname> <age>21</age> </student> <student> <firstname>Tee</firstname> <lastname>Rex</lastname> <age>21</age> </student> </class> </root>
因此,对于Physics类,它将打印“所有姓氏都相同”.
对于数学课,它会打印“所有姓氏都不一样”.
(这不是我真正的XML,因为它对于一个较小的问题是不可简化的,所以我自定义使用这个XML代表我的问题)
任何帮助将不胜感激.
问候,
Shobhit
<xsl:template match="class"> <xsl:choose> <xsl:when test=" count(student[not(lastname = preceding-sibling::student/lastname)]) = 1 "> <xsl:text>all lastnames are same</xsl:text> <xsl:when> <xsl:otherwise> <xsl:text>all lastnames are not same</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template>
XPath表达式
student[not(lastname = preceding-sibling::student/lastname)]
选择所有< student>节点的< lastname>与同一类中任何前面的姓氏不同.
在具有所有相同姓氏的类中,它们的计数正好为1(因为第一个学生总是有一个不同于任何前一个姓氏的姓氏).如果计数高于1,则该类中的一些学生具有不同的姓氏.
一个班级根本没有学生的情况将被识别为< xsl:否则>在上面的逻辑中的情况.您可能希望以某种方式明确处理该情况.