2017-03-19 2 views
0

Ich habe ein XML mit folgendem Inhalt. Ich möchte die Jobs basierend auf den Werten verwandter Zeiten sortieren.XSLT: Sortieren und Gruppieren von Schlüsseln mit mehreren Werten

Für jeden Job gibt es eine verwandte Zeit mit zwei Werten Num1 und Num2.
Ich möchte durch diese Werte sortieren, also wenn:
job1 hat time1 mit Werten Num1 = 10, Num2 = 12 und
job2 hat zeit2 mit Werten Num1 10 =, Num2 = 11 die außer Betrieb gesetzt sein sollte: job2 , job1.
und wenn Job3 time3 mit Werten Num1 = 11, Num2 = 09
hat, sollte der output sein: job2, job1, job3.
Kann ich dies mit xsl 1.0 tun?

<Corp> 
<Type> 
    <Class IRI="Jobs"/> 
    <Name IRI="Job1"/> 
</Type> 
<Type> 
    <Class IRI="Times"/> 
    <Name IRI="Time1"/> 
</Type> 
<Relation> 
    <RelClass IRI="Job-Time"/> 
    <Name IRI="Job1"/> 
    <Name IRI="Time1"/> 
</Relation> 
<Data> 
    <DataClass IRI="Num1"/> 
    <Name IRI="Time1"/> 
    <Value>10</Value> 
</Data> 
<Data> 
    <DataClass IRI="Num2"/> 
    <Name IRI="Time1"/> 
    <Value>12</Value> 
</Data> 

<Type> 
    <Class IRI="Jobs"/> 
    <Name IRI="Job2"/> 
</Type> 
<Type> 
    <Class IRI="Times"/> 
    <Name IRI="Time2"/> 
</Type> 
<Relation> 
    <RelClass IRI="Job-Time"/> 
    <Name IRI="Job2"/> 
    <Name IRI="Time2"/> 
</Relation> 
<Data> 
    <DataClass IRI="Num1"/> 
    <Name IRI="Time2"/> 
    <Value>10</Value> 
</Data> 
<Data> 
    <DataClass IRI="Num2"/> 
    <Name IRI="Time2"/> 
    <Value>11</Value> 
</Data>  
</Corp> 
+0

Sie ein Element haben ' 'das wird nirgendwo benutzt, da alle' Data' Elemente '' haben. Entweder verstehe ich die Struktur der Eingabedaten nicht (Sie müssen erklären, welche Elemente Jobs darstellen, welche Zeiten, wie sie zusammenhängen) oder Ihr Eingabe-Beispiel ist inkonsistent. –

+0

Hoppla, mein Schlechter! Ich habe das XML bearbeitet. Alle Zeiten für den zweiten Abschnitt sind Time2 (für Job2). Jeder Job ist einmalig und einmalig. – Warjeh

Antwort

0

Ich bin nicht sicher, warum Sie auch über Gruppierung fragen, wie sie für die Querverweise und Sortierung, dass als

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

    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:key name="rel" match="Relation[RelClass/@IRI = 'Job-Time']" use="Name[1]/@IRI"/> 

    <xsl:key name="num1" match="Data[DataClass/@IRI = 'Num1']" use="Name/@IRI"/> 
    <xsl:key name="num2" match="Data[DataClass/@IRI = 'Num2']" use="Name/@IRI"/> 

    <xsl:template match="/Corp"> 
     <xsl:copy> 
      <xsl:apply-templates select="Type[Class/@IRI = 'Jobs']"> 
       <xsl:sort select="key('num1', key('rel', Name/@IRI)/Name[2]/@IRI)/Value" data-type="number"/> 
       <xsl:sort select="key('num2', key('rel', Name/@IRI)/Name[2]/@IRI)/Value" data-type="number"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Type[Class/@IRI = 'Jobs']"> 
     <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Ich dachte Gruppierung könnte hilfreich sein. :) Das funktioniert wie erwartet. Vielen Dank. – Warjeh

Verwandte Themen