我有这个xml:
<Audit>
<Clsinfo>
<Class Discipline="BUSA" Number="7" Credits="4" Letter_grade="A" Id_num="0043">
<Attribute Code="DWSISKEY" Value="1-1-1"/>
<Attribute Code="ATTRIBUTE" Value="CSB4"/>
<Attribute Code="ATTRIBUTE" Value="N"/>
</Class>
<Class Discipline="BUSA" Number="72" Credits="5" Letter_grade="A" Id_num="0025">
<Attribute Code="DWSISKEY" Value="21173"/>
<Attribute Code="ATTRIBUTE" Value="CSB4"/>
<Attribute Code="ATTRIBUTE" Value="N"/>
</Class>
<Class Discipline="BSKI" Number="8" Credits="4" Letter_grade="A" Id_num="0051">
<Attribute Code="DWSISKEY" Value="1-1-2"/>
<Attribute Code="ATTRIBUTE" Value="P"/>
</Class>
<Class Discipline="CHIN" Number="1" Credits="4" Letter_grade="A" Id_num="0019">
<Attribute Code="DWSISKEY" Value="72800"/>
<Attribute Code="ATTRIBUTE" Value="AAC2"/>
<Attribute Code="ATTRIBUTE" Value="ASC2"/>
<Attribute Code="ATTRIBUTE" Value="CSC2"/>
<Attribute Code="ATTRIBUTE" Value="IG6A"/>
<Attribute Code="ATTRIBUTE" Value="N"/>
</Class>
</Clsinfo>
<Fallthrough Classes="4" Credits="21" Noncourses="0">
<Class Discipline="BUSA" Number="72" Credits="5" Letter_grade="A" Id_num="0025"/>
<Class Discipline="BSKI" Number="8" Credits="4" Letter_grade="P" Id_num="0051"/>
<Class Discipline="CHIN" Number="1" Credits="4" Letter_grade="A" Id_num="0019"/>
</Fallthrough>
</Audit>
我想将Fallthrough类分为两组,分别称为Basic Skills and Others。 Basic Skills组在Fallthrough中具有通过Id_num链接到Class Element的类,并且链接的Class元素的一个属性具有值“P”。否则,如果链接的Class元素的任何属性都没有值“P”,它将显示在Others组中。
所以,使用我的xml,我希望得到这个输出:
基本技能
BSKI 8
其他
BUSA 72 CHIN 1
如果有人能帮助我,我会非常感激。
谢谢, 安迪
答案 0 :(得分:0)
尝试类似:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" />
<xsl:key name="ftclass" match="Fallthrough/Class" use="@Id_num" />
<xsl:template match="/">
<xsl:text>Basic Skills: </xsl:text>
<xsl:apply-templates select="Audit/Clsinfo/Class[key('ftclass', @Id_num)/@Letter_grade='P']" />
<xsl:text> Others: </xsl:text>
<xsl:apply-templates select="Audit/Clsinfo/Class[not(key('ftclass', @Id_num)/@Letter_grade='P')]" />
</xsl:template>
<xsl:template match="Class">
<xsl:value-of select="@Discipline" />
<xsl:text> </xsl:text>
<xsl:value-of select="@Number" />
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
使用提供的输入,(文本)输出为:
Basic Skills:
BSKI 8
Others:
BUSA 7, BUSA 72, CHIN 1
答案 1 :(得分:0)
查找更新的:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:key name="ftclass" match="Fallthrough/Class" use="@Id_num"/>
<xsl:template match="/">
<xsl:text>Basic Skills: </xsl:text>
<xsl:apply-templates select="Audit/Clsinfo/Class[key('ftclass', @Id_num)][Attribute/attribute::*='P']"/>
<xsl:text> Others: </xsl:text>
<xsl:apply-templates select="Audit/Clsinfo/Class[key('ftclass', @Id_num)][not(Attribute/attribute::*='P')]"/>
</xsl:template>
<xsl:template match="Class">
<xsl:value-of select="@Discipline"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@Number"/>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
Basic Skills:
BSKI 8
Others:
BUSA 72, CHIN 1