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

标签 xml xslt sorting alphabetized

我正在尝试弄清楚如何使用 XSL 按姓氏字母顺序对 XML 员工列表进行排序。现在它只是按照与 XML 中相同的顺序显示 XML 信息。我不认为我完全理解如何使用 <xsl:sort> 函数,因为我是 XSL 的新手。我还尝试将 order-by="+ Lastname"<xsl:for-each> 放在一起,但我也无法让它工作。

这是我的 xml:

<?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>

这是我的 XSL:

<?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: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-eachselect 设置上下文节点,因此根据 Employee 节点计算表达式。

此外,textascending 是默认值,因此您可以只写

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

关于xml - 使用 XSL 按字母顺序对 XML 节点进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815479/

相关文章:

xml - 我需要一个模式规则,仅当另一个属性首先存在时才强制执行该属性的存在。

python - Python如何从XML(例如Unicode)获取列表到列表?

android - 更改安卓 :minSdkVersion Has No Effect

c - 按降序对数组中的奇数进行排序

javascript - 在 Chrome 中对超过 10 个对象的数组进行排序

xml - 如何使用最新版本的 org.clojure/data.xml 生成没有命名空间的 XML

xml - XSLT 外部文档查找

xml - 根据 XSLT 中的条件增加值

XSLT 后续兄弟意外结果

node.js - NodeJS + Node-MongoDB 原生 : sort objects in alphabet order