2012-03-22 11 views
2

XSLを使用して姓でアルファベット順にXMLリストをソートする方法を解明しようとしています。今はXML情報をXMLと同じ順序で表示します。 <xsl:sort>関数をXSLを初めて使うときの使い方を完全に理解しているとは思いません。私もorder-by="+ Lastname"<xsl:for-each>と入れてみましたが、どちらもうまく動作しませんでした。XSLを使用してXMLノードをアルファベット順にソート

HERESに私の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> 

そしてHERESに私の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> 

答えて

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"/> 
+0

を書くことができます!うれしいことは何か簡単だった。非常に迅速な対応に感謝します。 – Jmh2013

+0

@ Fourthmeal70、私は助けてくれるとうれしいです。率直に言えば、XSLTを使って複数のことを行うこともできないので、何かを学びました。将来の質問で最高の結果を得るには、正解を「受け入れ」(チェックマーク)とマークする必要があります。 – harpo

関連する問題