1
我想基於幾個子元素對一些XML(使用XSLT)進行排序,並將結果作爲XML返回。我知道這可能並不難,但這是我第一次使用XSLT的經歷,它給我帶來了一些麻煩。這裏的XML:使用XSLT對基於幾個子元素的XML排序
<root>
<subject>
<courseSubjectHeader>
<subjectCode>B</subjectCode>
<subjectName>text</subjectName>
<unit>text</unit>
<faculty>text</faculty>
</courseSubjectHeader>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>B 200</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>B 100</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
</subject>
<subject>
<courseSubjectHeader>
<subjectCode>C</subjectCode>
<subjectName>text</subjectName>
<unit>text</unit>
<faculty>text</faculty>
</courseSubjectHeader>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>C 300</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>C 100</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
</subject>
<subject>
<courseSubjectHeader>
<subjectCode>A</subjectCode>
<subjectName>text</subjectName>
<unit>text</unit>
<faculty>text</faculty>
</courseSubjectHeader>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>A 300</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>A 200</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
</subject>
</root>
我想用自己的「subjectCode」子元素的「主體」進行排序,並通過他們的「subjectAndNumber」子元素每個主題內的所有課程。因此生成的XML將是...
<root>
<subject>
<courseSubjectHeader>
<subjectCode>A</subjectCode>
<subjectName>text</subjectName>
<unit>text</unit>
<faculty>text</faculty>
</courseSubjectHeader>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>A 200</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>A 300</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
</subject>
<subject>
<courseSubjectHeader>
<subjectCode>B</subjectCode>
<subjectName>text</subjectName>
<unit>text</unit>
<faculty>text</faculty>
</courseSubjectHeader>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>B 100</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>B 200</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
</subject>
<subject>
<courseSubjectHeader>
<subjectCode>C</subjectCode>
<subjectName>text</subjectName>
<unit>text</unit>
<faculty>text</faculty>
</courseSubjectHeader>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>C 100</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
<course>
<crsLevel>text</crsLevel>
<subjectAndNumber>C 300</subjectAndNumber>
<units>3.0</units>
<hours>3-0</hours>
</course>
</subject>
</root>
最後,這裏是我的(很可怕)嘗試在XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/ /Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="subject">
<xsl:sort select="subjectCode"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="subject">
<xsl:copy>
<xsl:apply-templates select="course">
<xsl:sort select="subjectAndNumber"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
任何幫助,將不勝感激,謝謝!
啊,這是我的錯誤,我必須在堆棧編輯器中編輯它時添加了該空間。非常感謝,這看起來很完美! – user3717031