学位プログラムのクラスをリストした XML ファイルがあります。学位名の下にクラスのグループを正常に作成する XSLT を (助けを借りて) 作成しました。しかし、クライアントは、選択科目と非選択科目を識別する第 3 レベルを望んでいます。選択科目は、選択科目の場合は「Y」、そうでない場合は「N」、そうでない場合は「プログラム要件」のデータとともにリストされます。
element に「N」が含まれている場合、「Program Requirement」というタイトルでクラスをグループ化する XSLT に別のレベルを追加する必要があります<FlagElectives1>
。
この要素に基づいて別のキーを作成する必要があると思います。それから、「プログラム要件」または「プログラム選択科目」のいずれかを示す xsl:text タイトルを作成するテンプレートを作成しますが、行き詰まっています。以前に 3 レベルのグループ化を行ったことがありません。
ここに私のXSLTがあります:
<?xml version="1.0"?>
<!-- DWXMLSource="STX049 Catalog parsed.xml" -->
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:template match="/">
<CrystalReport>
<xsl:apply-templates/>
</CrystalReport>
</xsl:template>
<xsl:key name="degrees-by-title" match="CrystalReport/Group/Group/Group/Details" use="Section/ICCB1" />
<xsl:template match="CrystalReport/Group/Group/Group">
<Degree>
<xsl:for-each select="Details[count(. | key('degrees-by-title', Section/ICCB1)[1]) = 1]">
<xsl:sort select="Section/ACADPROGRAMSID1" />
<department>
<Degreetitle>
<xsl:apply-templates select="Section/ACPGDEGREE1" />
</Degreetitle>
<Certtitle>
<xsl:apply-templates select="Section/CCD11" />
</Certtitle>
<DegreeDesc>
<xsl:value-of select="Section/ACPGCOMMENTS1"/>
</DegreeDesc>
<ICCBcode>
<xsl:value-of select="Section/ICCB1"/>
</ICCBcode>
<ProgramID>
<xsl:value-of select="Section/ACADPROGRAMSID1"/>
</ProgramID>
<xsl:for-each select="key('degrees-by-title', Section/ICCB1)">
<xsl:sort select="Section/FlagElectives1" order="ascending" />
<xsl:sort select="Section/DEPARTMENT11" />
<xsl:sort select="Section/CRSNO1" />
<Details>
<class>
<deptname>
<xsl:value-of select="Section/DEPARTMENT11"/>
</deptname>
<courseno>
<xsl:value-of select="Section/CRSNO1"/>
</courseno>
<classname>
<xsl:value-of select="Section/CRSTITLE1"/>
</classname>
<classcredit>
<xsl:value-of select="Section/CRSMINCRED1"/>
</classcredit>
<Elective>
<xsl:value-of select="Section/FlagElectives1" />
</Elective>
</class>
</Details>
</xsl:for-each>
</department>
</xsl:for-each>
</Degree>
</xsl:template>
<xsl:template match="Section/ACPGDEGREE1[child::node()]">
<xsl:value-of select="."/>
<xsl:text> DEGREE</xsl:text>
</xsl:template>
<xsl:template match="Section/CCD11[child::node()]">
<xsl:text> CERTIFICATE</xsl:text>
</xsl:template>
</xsl:stylesheet>
私のXMLの構造は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<CrystalReport>
<Group Level="1">
<Group Level="2">
<Group Level="3">
<Details>
<Section>
<ACPGDEGREE1>AAS</ACPGDEGREE1>
<CCD11/>
<ACPGCOMMENTS1>The Accounting program</ACPGCOMMENTS1>
<ICCB1>3203</ICCB1>
<ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
<CRSNO1>1110</CRSNO1>
<ACRBPRINTEDSPEC1/>
<ACPGHOMELANGNOTREQDRSN1>General Education</ACPGHOMELANGNOTREQDRSN1>
<CRSMINCRED1>2</CRSMINCRED1>
<ACPGAREAOFSTUDY1>Accounting</ACPGAREAOFSTUDY1>
<CRSTITLE1>Using Computers: An Introduction</CRSTITLE1>
<DEPARTMENT11>ACCOU</DEPARTMENT11>
<CRSSUBJECT1>CIS</CRSSUBJECT1>
<ACRBLABEL1>CIS REQUIREMENT</ACRBLABEL1>
<CRSMAXCRED1/>
<FlagElectives1>N</FlagElectives1>
</Section>
</Details>
<Details>
<Section>
<ACPGDEGREE1>AAS</ACPGDEGREE1>
<CCD11/>
<ACPGCOMMENTS1>The Accounting program</ACPGCOMMENTS1>
<ICCB1>3203</ICCB1>
<ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
<CRSNO1>1150</CRSNO1>
<ACRBPRINTEDSPEC1/>
<ACPGHOMELANGNOTREQDRSN1>General Education</ACPGHOMELANGNOTREQDRSN1>
<CRSMINCRED1>3</CRSMINCRED1>
<ACPGAREAOFSTUDY1>Accounting</ACPGAREAOFSTUDY1>
<CRSTITLE1>Intro to Computer</CRSTITLE1>
<DEPARTMENT11>ACCOU</DEPARTMENT11>
<CRSSUBJECT1>CIS</CRSSUBJECT1>
<ACRBLABEL1>CIS</ACRBLABEL1>
<CRSMAXCRED1/>
<FlagElectives1>Y</FlagElectives1>
</Section>
</Details>
</Group>
</Group>
</Group>
</CrystalReport>
グループ化の最初のレベルは要素に基づく必要があります<DEPARTMENT11>
。さまざまな学位と証明書のタイトルが<ACPGAREAOFSTUDY1>
フィールドに表示されます。これらすべての第 2 レベルの固有フィールドは次のとおりです。<ACADPROGRAMSID1>
目的の出力は次のとおりです。
<CrystalReport>
<Degrees>
<!--group and repeat "Degrees" for-each based on element ACPGAREAOFSTUDY1-->
<areaofstudy>Accounting</areaofstudy>
<Degree>
<department>
<!--group and repeat "department" for-each based on element ICCB1-->
<Degreetitle>AAS DEGREE</Degreetitle>
<Certtitle />
<DegreeDesc>The Accounting program</DegreeDesc>
<ICCBcode>3203</ICCBcode>
<ProgramID>ACCOU.AAS</ProgramID>
<!--group and repeat "Details" for-each based on element ACADPROGRAMSID1 under titles "Program Requirement" or "Program Elective" based on element "FlagElectives1"-->
<h1>Program Requirements</h1>
<Details>
<class>
<deptname>ACCOU</deptname>
<courseno>1150</courseno>
<classname>Intro to Computer</classname>
<classcredit>3</classcredit>
<Elective>N</Elective>
</class>
</Details>
<h1>Program Electives</h1>
<Details>
<class>
<deptname>ACCOU</deptname>
<courseno>1110</courseno>
<classname>Using Computers: An Introduction</classname>
<classcredit>2</classcredit>
<Elective>Y</Elective>
</class>
</Details>
</department>
</Degree>
<Degree>
<department>
<Degreetitle>AAS DEGREE</Degreetitle>
<Certtitle />
<DegreeDesc>The Accounting program</DegreeDesc>
<ICCBcode>3203</ICCBcode>
<ProgramID>ACCOU.AAS</ProgramID>
<h1>Program Requirements</h1>
<Details>
<class>
<deptname>ACCOU</deptname>
<courseno>1150</courseno>
<classname>Intro to Computer</classname>
<classcredit>3</classcredit>
<Elective>Y</Elective>
</class>
</Details>
<h1>Program Electives</h1>
<Details>
<class>
<deptname>ACCOU</deptname>
<courseno>1110</courseno>
<classname>Using Computers: An Introduction</classname>
<classcredit>2</classcredit>
<Elective>N</Elective>
</class>
</Details>
</department>
</Degree>
</Degrees>
</CrystalReport>