XSLT不生成根元素

时间:2012-12-11 07:02:31

标签: xml xslt

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

首先,它不产生ROOT元素。

其次,XML数据有两个元素<ACPGDEGREE1><CCD11>。当一个包含数据时,另一个是空的,反之亦然。如果<ACPGDEGREE1>包含数据,我想插入数据并添加文本&#34; DEGREE&#34;在它之后。如果<CCD11>包含数据,我想忽略数据但插入文本&#34;证书&#34;。

非常感谢任何帮助。

这是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>

1 个答案:

答案 0 :(得分: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编码主要是翻译这些规则直接进入模板规则。