Announcement

Collapse
No announcement yet.

Sortieren von Nodes im Ergebnis

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

  • Sortieren von Nodes im Ergebnis

    hallo,

    ich kann mich erinnern für mein problem mal eine standar lösung gesehen zu haben,weiss aber nicht mehr wie und wo

    also folgendes:

    struktur ungefähr:

    <form>
    <name>form1</name>
    <element>
    <name>element 1</name>
    </element>
    <element>
    <name>element 2</name>
    </element>
    <element>
    <name>element 3</name>
    </element>
    </form>
    <form>
    <name>form2</name>
    <element>
    <name>element 4</name>
    </element>
    <element>
    <name>element 1</name>
    </element>
    <element>
    <name>element 2</name>
    </element>
    </form>

    Ich würde gerne Text ausgeben, der nur sagt:

    element 1 kommt vor in folgenden Formularen:
    form 1
    form 2

    element 2 kommt vor in folgenden Formularen:
    form 1
    form 2

    element 3 kommt vor in folgenden Formularen:
    form 1

    etc.

    wie kann ich as machen? sobald ich ja im kontext des einzelnen elements bin würde ich ja für jedes element einen extra eintrag bekommen, nicht aber eine saubere liste untereinander?

    danke für eure hilfe!

  • #2
    Anmerkung:Habe jetzt die Münch'sche Methode wiederentdeckt mit Beispielen wenn man nur jeweils ein child einer art hat nach dem man sortiert wie z.b.:

    <cd>
    <interpret>test 1</interpret>
    </cd>

    mein fall ist ähnlich, aber eher so:
    <cd>
    <interpret>test 1</interpret>
    <interpret>test 2</interpret>
    </cd>

    ich möchte dann sortiert listen für test 1 und test 2.

    scheint greifbar nahe, aber ich komm nicht dahinter...

    Comment


    • #3
      Probiere diesen Ansatz:

      Code:
      <?xml version="1.0" encoding="ISO-8859-1"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      
        <xsl:key name="name_key" match="name" use="text()"/>
      
        <xsl:template match="wurzel">
      
          <xsl:for-each select="//element/name[generate-id() = generate-id(key('name_key',text())[1])]">
            <xsl:sort select="text()" data-type="text" order="ascending"/>
            <xsl:value-of select="."/><br/>
            <xsl:for-each select="key('name_key',text())">
              <xsl:value-of select="ancestor::form/name"/><br/>
            </xsl:for-each>
            <br/>
          </xsl:for-each>
      
        </xsl:template>
      
      </xsl:stylesheet>

      Ergebnis:

      element 1
      form1
      form2

      element 2
      form1
      form2

      element 3
      form1

      element 4
      form2

      Comment

      Working...
      X