Announcement

Collapse
No announcement yet.

<xsl:sort> selec="" aus XML lesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • <xsl:sort> selec="" aus XML lesen

    Hallo Zusammen!

    Ich beschäftige mich zurzeit mit XSL und XML und habe da eine Frage:

    XML:

    Code:
    <ITEMLIST>
    <GROUP>
    <ITEM>
    ...
    <SORT>MANUFACTURER</SORT>
    ...
    </ITEM>
    </GROUP>
    </ITEMLIST>

    XSL:
    <xsl:for-each select="ITEMLIST/GROUP">
    ...
    <xsl:for-each select="ITEM">
    <xsl:sort select="" order="ascending"/>
    ...
    </xsl:for-each>
    ...
    </xsl:for-each>
    Meine Frage ist jetzt, wie schaffe ich es, das mir das XSL nach dem Sortiert, was ich in dem XML im <SORT> Tag steht?
    Ich habe es schon mit dem <xsl:attribute> im <xsl:sort> versucht, jedoch lässt er mir es nicht zu. Ebenfalls habe ich schon versucht der Inhalt des <SORT> Tag in einer Variable zu speichern.
    Funktioniert alles nicht

    Hat jemand eine Idee?

    Vielen Dank!
    Gruss Necromancer

  • #2
    Maccht den
    Code:
    <xsl:sort select="SORT"/>
    nicht, was du willst? Damit werden die ITEM-Elemente in der Reihenfolge verarbeitet, die sich aus dem Wert des SORT-Kindelementes ergibt.

    Ansonsten ist es immer hilfreich, eine kurzes, aber vollständiges XML-Eingabedokument zu zeigen und dann das dazugehörige Resultat, dass das Stylesheet erzeugen soll.

    Comment


    • #3
      Hallo,

      nein macht es eben nicht

      XML:

      Code:
      <ITEMLIST>
      <GROUP name="Mac Book Pro 15 Zoll">
      <ITEM>
      <NUMBER2>I1004</NUMBER2>
      <TITLE>Apple MacBook Pro 15.4 Zoll</TITLE>
      <DESCRIPTION>Apple MacBook Pro 15.4 Zoll</DESCRIPTION>
      <GROSS_PRICE>2499.00</GROSS_PRICE>
      <MANUFACTURER>3</MANUFACTURER>
      <MANUFACTURER_ITEM_NUMBER>MB985*/A</MANUFACTURER_ITEM_NUMBER>
      <MANUFACTURER_HYPERLINK>www.apple.com</MANUFACTURER_HYPERLINK>
      <SORTIEREN>MANUFACTURER</SORTIEREN>
      </ITEM>
      <ITEM>
      <NUMBER2>I1005</NUMBER2>
      <TITLE>Apple MacBook Pro 15.4 Zoll</TITLE>
      <DESCRIPTION>Apple MacBook Pro 15.4 Zoll</DESCRIPTION><CURRENCY>CHF</CURRENCY>
      <GROSS_PRICE>2799.00</GROSS_PRICE><NET_PRICE>2570.00</NET_PRICE>
      <MANUFACTURER>2</MANUFACTURER>
      <MANUFACTURER_ITEM_NUMBER>MB986*/A</MANUFACTURER_ITEM_NUMBER>
      <MANUFACTURER_HYPERLINK>www.apple.com</MANUFACTURER_HYPERLINK>
      <SORTIEREN>MANUFACTURER</SORTIEREN>
      </ITEM>
      <ITEM>
      <NUMBER2>I1003</NUMBER2>
      <TITLE>Apple MacBook Pro 15.4 Zoll</TITLE>
      <DESCRIPTION>Apple MacBook Pro 15.4 Zoll</DESCRIPTION>
      <GROSS_PRICE>2199.00</GROSS_PRICE>
      <MANUFACTURER>1</MANUFACTURER>
      <MANUFACTURER_ITEM_NUMBER>MC118*/A</MANUFACTURER_ITEM_NUMBER>
      <MANUFACTURER_HYPERLINK>www.apple.com</MANUFACTURER_HYPERLINK>
      <SORTIEREN>MANUFACTURER</SORTIEREN>
      </ITEM>
      </GROUP>
      </ITEMLIST>
      und das dazugehörige XSL:

      <?xml version="1.0" encoding="iso-8859-1"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:asp='remove'>
      <xsl:template match="/">

      <asp:table id="tblitemlist" runat="server">

      <xsl:for-each select="ITEMLIST/GROUP">

      <asp:tableheaderrow>
      <asp:tableheadercell cssclass="ItemGroup" columnspan="5">
      <asp:label runat="server">
      <xsl:value-of select="@name"/>
      </asp:label>
      </asp:tableheadercell>
      </asp:tableheaderrow>

      <xsl:for-each select="ITEM">

      <xsl:sort select="SORTIEREN" order="ascending"/>

      <asp:tablerow>
      <asp:tablecell>
      <asp:table runat="server" cssclass="TableMargin">

      <asp:tablerow>

      <asp:tablecell cssclass="ItemTitel" columnspan="4">
      <asp:label runat="server">
      <xsl:value-of select="TITLE"/>
      </asp:label>
      </asp:tablecell>

      </asp:tablerow>

      <asp:tablerow>

      </asp:tablerow>

      <asp:tablerow>
      <asp:tablecell/>
      <asp:tablecell>
      <b>Hersteller: </b><xsl:value-of select="MANUFACTURER"/> | <b>Herstellernr.: </b><xsl:value-of select="MANUFACTURER_ITEM_NUMBER"/>
      </asp:tablecell>
      </asp:tablerow>


      </asp:table>
      </asp:tablecell>
      </asp:tablerow>

      </xsl:for-each>
      </xsl:for-each>


      </asp:table>
      </xsl:template>
      </xsl:stylesheet>
      so, das wären die 2 Dokumente.
      habe den Sortierteil markiert im XSL und XML File.
      Hoffe so klappts einbisschen besser
      Vielen Dank!

      Comment


      • #4
        Dann willst du
        Code:
        <xsl:sort select="*[local-name() = current()/SORTIEREN]"/>

        Comment


        • #5
          Jeah
          Vielen vielen herzlichen Dank!
          Du weisst gar nicht wie du mir damit geholfen hast !

          Kleine Frage, wie kommst du auf *[local-name() = current()/SORTIEREN]" bzw. was ist das? gibt es dazu irgend eine Anleitungen zum mehr darüber lesen?

          Comment


          • #6
            Es gibt sicher jede Menge XSLT und XPath Bücher, die Erklärungen liefern. Ansonsten kann man aiuch in die jeweiligen Spezifikationen schauen:http://www.w3.org/TR/xpath/#function-local-name, http://www.w3.org/TR/xslt#function-current
            Der Stern "*" ist nur eine Wildcard, um jedes Element zu selektieren, dass Prädikat
            Code:
            [local-name() = current()/SORTIEREN]
            liefert dann die Bedingung, dass der lokale Name des Elementes gleich dem Inhalt des SORTIEREN-Elementes des current()-Knoten ist, also des ITEM-Elementes.

            Comment

            Working...
            X