0

我的 XSLT 工作得很好,但我遇到了一些问题。

首先,它不产生 ROOT 元素。

其次,XML 数据有两个元素<ACPGDEGREE1><CCD11>. 当一个包含数据时,另一个为空,反之亦然。如果<ACPGDEGREE1>包含数据,我想插入数据并在其后添加文本“DEGREE”。如果<CCD11>包含数据,我想忽略数据但插入文本“CERTIFICATE”。

任何帮助将不胜感激。

这是 XSLT:

<?xml version="1.0"?>
<!-- DWXMLSource="STX049 Course Catalog Parsed_FINAL.xml" -->
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="no"/>

    <xsl:key name="degrees-by-title" match="Section" use="ICCB1"/>

    <xsl:template match="CrystalReport/Group">

        <crystalreports>
            <xsl:for-each select="Section[count(. | key('degrees-by-title', ICCB1)[1]) = 1]">
                <xsl:sort select="ACADPROGRAMSID1"/>
                <department>
                    <Degreetitle>
                        <xsl:value-of select="ACPGDEGREE1"/>
                    </Degreetitle>
                    <xsl:text> DEGREE</xsl:text>
                    <Certtitle>
                        <xsl:value-of select="CCD11"/>
                    </Certtitle>
                    <xsl:text> CERTIFICATE 
                    </xsl:text>
                    <DegreeDesc>
                        <xsl:value-of select="ACPGCOMMENTS1"/>
                    </DegreeDesc>
                    <xsl:text>ICCB Code</xsl:text>
                    <ICCBcode>
                        <xsl:value-of select="ICCB1"/>
                    </ICCBcode>
                    <xsl:text> | Field of Study     Code: </xsl:text>
                    <ProgramID>
                        <xsl:value-of select="ACADPROGRAMSID1"/>
                    </ProgramID>
                    <xsl:text>Program Requirements</xsl:text>
                    <xsl:for-each select="key('degrees-by-title', ICCB1)">
                        <xsl:sort select="DEPARTMENT12"/>
                        <xsl:sort select="CRSNO1"/>
                        <Details>
                            <class>
                                <deptname>
                                    <xsl:value-of select="DEPARTMENT12"/>
                                </deptname>
                                <xsl:text/>
                                <courseno>
                                    <xsl:value-of select="CRSNO1"/>
                                </courseno>
                                <classname>
                                    <xsl:value-of select="CRSTITLE11"/>
                                </classname>
                                <xsl:text/>
                                <classcredit>
                                    <xsl:value-of select="CRSMINCRED1"/>
                                </classcredit>
                            </class>
                            <xsl:text>
                            </xsl:text>
                        </Details>
                        <xsl:text>
                        </xsl:text>
                    </xsl:for-each>
                </department>
            </xsl:for-each>
        </crystalreports>

    </xsl:template>

</xsl:stylesheet>

这是示例 XML:

<?xml version="1.0" encoding="UTF-8"?>
<CrystalReport>
  <Group Level="3">
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>1150</CRSNO1>
      <CRSTITLE11>Managerial Accounting</CRSTITLE11>
      <CRSMINCRED1>4.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>2205</CRSNO1>
      <CRSTITLE11>Federal Taxation I</CRSTITLE11>
      <CRSMINCRED1>3.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>2241</CRSNO1>
      <CRSTITLE11>Intermediate Accounting I</CRSTITLE11>
      <CRSMINCRED1>4.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>2242</CRSNO1>
      <CRSTITLE11>Intermediate Accounting II</CRSTITLE11>
      <CRSMINCRED1>4.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>2251</CRSNO1>
      <CRSTITLE11>Cost Accounting</CRSTITLE11>
      <CRSMINCRED1>3.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>1100</CRSNO1>
      <CRSTITLE11>Introduction to Business</CRSTITLE11>
      <CRSMINCRED1>3.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>2201</CRSNO1>
      <CRSTITLE11>Macroeconomics and the Global Economy</CRSTITLE11>
      <CRSMINCRED1>3.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>1140</CRSNO1>
      <CRSTITLE11>Financial Accounting</CRSTITLE11>
      <CRSMINCRED1>4.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <Section SectionNumber="0">
      <ACPGDEGREE1>AAS</ACPGDEGREE1>
      <CCD11/>
      <ACPGCOMMENTS1>The Accounting program is designed to provide the theoretical and practical background necessary for supervisory and administrative careers in accounting and accounting-related areas. This degree requires a minimum of 64 credits in program requirements, program electives, and general education as listed below.</ACPGCOMMENTS1>
      <ICCB1>3203</ICCB1>
      <DEPARTMENT12>ACCOU</DEPARTMENT12>
      <ACADPROGRAMSID1>ACCOU.AAS</ACADPROGRAMSID1>
      <CRSNO1>1114</CRSNO1>
      <CRSTITLE11>Business Ethics</CRSTITLE11>
      <CRSMINCRED1>3.00</CRSMINCRED1>
      <ACRBPRINTEDSPEC1/>
      <ACPGHOMELANGNOTREQDRSN1>General Education - 12 to 16 (In addition to those listed above)  Total Credits Required - 64 to 70</ACPGHOMELANGNOTREQDRSN1>
    </Section>
    <GroupFooter>
      <Section SectionNumber="0"/>
    </GroupFooter>
  </Group>
</CrystalReport>
4

1 回答 1

1

没有根元素的原因是您没有编写任何会生成它的代码。正常的方法是让模板匹配源文档的根目录,例如

<xsl:template match="/">
  <root>
    <xsl:apply-templates/>
  </root>
</xsl:template>

本要求声明:

If <ACPGDEGREE1> contains data, I want to insert the data and add the text "DEGREE" after it. If <CCD11> contains data, I want to ignore the data but insert the text "CERTIFICATE".

似乎很容易映射到两个模板规则:

<xsl:template match="ACPGDEGREE1[child::node()]">
  <xsl:value-of select="."/>
  <xsl:text> DEGREE</xsl:text>
</xsl:template>

<xsl:template match="CCD11[child::node()]">
  <xsl:text> CERTIFICATE</xsl:text>
</xsl:template>

您已经了解了如何用一组规则来表达您的需求(当我看到这个时,我想这样做),但您似乎没有理解 XSLT 编码主要包括将这些规则直接转换为模板规则。

于 2012-12-11T10:47:39.310 回答