使用XSL按字母顺序对XML节点进行排序

时间:2012-03-22 02:04:40

标签: xml xslt sorting alphabetized

我试图弄清楚如何使用XSL按姓氏的字母顺序对员工的XML列表进行排序。现在它只是以与XML中相同的顺序显示XML信息。我不认为我完全理解如何使用<xsl:sort>函数,因为我是XSL的新手。我也尝试将order-by="+ Lastname"放入<xsl:for-each>,我也无法使用<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="Company1.xsl"?> <Company> <Employee> <Firstname>John</Firstname> <Lastname>Smith</Lastname> <ssn>635-35-7463</ssn> <doh>February 3, 2011</doh> <Age>34</Age> </Employee> <Employee> <Firstname>Brad</Firstname> <Lastname>Roberts</Lastname> <ssn>789-65-4568</ssn> <doh>February 13, 2012</doh> <Age>25</Age> </Employee> <Employee> <Firstname>Karen</Firstname> <Lastname>Smith</Lastname> <ssn>369-12-7415</ssn> <doh>March 24, 2011</doh> <Age>28</Age> </Employee> <Employee> <Firstname>Eli</Firstname> <Lastname>Smith</Lastname> <ssn>489-32-8525</ssn> <doh>September 14, 2010</doh> <Age>38</Age> </Employee> <Employee> <Firstname>Bill</Firstname> <Lastname>Joel</Lastname> <ssn>689-67-7634</ssn> <doh>February 29, 2012</doh> <Age>24</Age> </Employee> <Employee> <Firstname>Kelly</Firstname> <Lastname>Greene</Lastname> <ssn>927-82-6873</ssn> <doh>December 3, 2010</doh> <Age>34</Age> </Employee> </Company>

继承我的xml:

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
    <HTML>
    <HEAD>
    <TITLE>Company Employees</TITLE> 
    </HEAD>
    <BODY>
    <H2>Company Employees</H2> 

    <xsl:for-each select="Company/Employee">
        <xsl:sort select="Employee/Lastname" data-type="text" order="ascending"/>
        <xsl:sort select="Employee/Firstname" data-type="text" order="ascending"/>

        <SPAN STYLE="font-weight:bold">FirstName: </SPAN>
            <xsl:value-of select="Lastname" />
        <BR />
        <SPAN STYLE="font-weight:bold">LastName: </SPAN>
            <xsl:value-of select="Firstname" />
        <BR /> 
        <SPAN STYLE="font-weight:bold">SSN: </SPAN> 
        <xsl:value-of select="ssn" /> 
        <BR /> 
        <SPAN STYLE="font-weight:bold">Date of Hire: </SPAN> 
        <xsl:value-of select="doh" /> 
        <BR /> 
        <SPAN STYLE="font-weight:bold">Age: </SPAN> 
        <xsl:value-of select="Age" /> 
        <P/>
    </xsl:for-each>
    </BODY>
    </HTML>
    </xsl:template>
</xsl:stylesheet>

继承我的XSL:

{{1}}

1 个答案:

答案 0 :(得分:7)

一目了然,

    <xsl:sort select="Employee/Lastname" data-type="text" order="ascending"/>
    <xsl:sort select="Employee/Firstname" data-type="text" order="ascending"/>

应该是

    <xsl:sort select="Lastname" data-type="text" order="ascending"/>
    <xsl:sort select="Firstname" data-type="text" order="ascending"/>

for-each设置select的上下文节点,因此针对Employee节点计算表达式。

此外,textascending是默认值,因此您只需编写

即可
    <xsl:sort select="Lastname"/>
    <xsl:sort select="Firstname"/>