Marcus: ID für doppelt vorkommende Werte

Hallo,

Ich habe bereits vor einiger Zeit hier gepostet und da wollte ich mit XSLT Elemente zu neuen Gruppen zusammenstellen. Schließlich hat mir hier jemand helfen können. Also sieht meine neue Gruppierung grad so aus:

<FF>
   <gruppe>
      <meta>
        <Value2>4.9</Value2>
        <Value1>5.7</Value1>
        <FileName>file2</FileName>
        <Quantity>1</Quantity>
      </meta>
      <meta>
        <Value2>2.9</Value2>
        <Value1>5.7</Value1>
        <FileName>file4</FileName>
        <FileName>file5</FileName>
        <Quantity>2</Quantity>
      </meta>
   </gruppe>
   <gruppe>
      <meta>
        <Value2>4.9</Value2>
        <Value1>6.0</Value1>
        <FileName>file3</FileName>
        <Quantity>1</Quantity>
      </meta>
   </gruppe>
   <gruppe>
      <meta>
        <Value2>4.0</Value2>
        <Value1>10.0</Value1>
        <FileName>file10</FileName>
        <Quantity>1</Quantity>
      </meta>
   </gruppe>
</FF>

Nun bin ich noch vor eine weitere Herausforderung getsellt worden un weiss wieder nicht weiter. Ich möchte also, da die Gruppen momentan nach "Value1"sortiert sind, zusätzlich noch heraus bekommen wo doppelt vorkommende Value2 Elemente vorkommen und die dann evtl. mit einer gleichen id versehen, so das ich mit Hilfe dieser Information dann weiterarbeiten kann. Also ich stelle mir das so vor:

<FF>
   <gruppe>
      <meta>
        <Value2 id="1">4.9</Value2>
        <Value1>5.7</Value1>
        <FileName>file2</FileName>
        <Quantity>1</Quantity>
      </meta>
      <meta>
        <Value2 id="2">2.9</Value2>
        <Value1>5.7</Value1>
        <FileName>file4</FileName>
        <FileName>file5</FileName>
        <Quantity>2</Quantity>
      </meta>
   </gruppe>
   <gruppe>
      <meta>
        <Value2 id="1">4.9</Value2>
        <Value1>6.0</Value1>
        <FileName>file3</FileName>
        <Quantity>1</Quantity>
      </meta>
   </gruppe>
   <gruppe>
      <meta>
        <Value2 id="3">4.0</Value2>
        <Value1>10.0</Value1>
        <FileName>file10</FileName>
        <Quantity>1</Quantity>
      </meta>
   </gruppe>
</FF>

Hat da jemand eine Idee wie man so was realisieren könnte. Wäre für Hilfe sehr dankbar!

Gruß

Marcus

  1. Hallo,

    Ich habe bereits vor einiger Zeit hier gepostet und da wollte ich mit XSLT Elemente zu neuen Gruppen zusammenstellen. Schließlich hat mir hier jemand helfen können. Also sieht meine neue Gruppierung grad so aus:

    [...]

    Nun bin ich noch vor eine weitere Herausforderung getsellt worden un weiss wieder nicht weiter. Ich möchte also, da die Gruppen momentan nach "Value1"sortiert sind, zusätzlich noch heraus bekommen wo doppelt vorkommende Value2 Elemente vorkommen und die dann evtl. mit einer gleichen id versehen, so das ich mit Hilfe dieser Information dann weiterarbeiten kann. Also ich stelle mir das so vor:

    Wie sieht dein XSLT aus? (XSLT 1 oder XSLT 2?)
    Es ist keine allzugute Idee nur Zahlen als ID zu verwenden.

    Grüße
    Thomas

    1. Hallo,

      Wie sieht dein XSLT aus? (XSLT 1 oder XSLT 2?)
      Es ist keine allzugute Idee nur Zahlen als ID zu verwenden.

      Müssen unabhängig davon IDs nicht eindeutig sein? Wäre hier nicht IDREF angebracht?
      (http://edition-w3c.de/TR/2000/REC-xml-20001006/#sec-attribute-types)

      Viele Grüße

      Michi

      1. Hallo,

        Wie sieht dein XSLT aus? (XSLT 1 oder XSLT 2?)
        Es ist keine allzugute Idee nur Zahlen als ID zu verwenden.

        Ich verwende mittlerweile XSLT 2. Im Prinzip wäre es mir egal welche Form die ID hat, wenn man die überhaupt so nennen will. Es muss nur hinterher sich ermitteln lassen, welche "Value2" dieselben Werte haben.

        Hab leider keine Erfahrung mit IDREF. Von daher wie müsste ich damit umgehen?

        Gruß Marcus

        1. Hallo,

          Wie sieht dein XSLT aus? (XSLT 1 oder XSLT 2?)
          Es ist keine allzugute Idee nur Zahlen als ID zu verwenden.

          Ich verwende mittlerweile XSLT 2.

          Fein, aber ich weiss noch immer nicht was du bisher gemacht hast.
          Ich denke du hast dafür Verständnis, wenn ich nicht alles für dich von Grund auf schreiben will.
          Ich nehme an du verwendest: <xsl:for-each-group group-by="Value1">, du kannst jetzt entweder eine weiter inner gruppierung mchen, oder mit key-arbeiten. Kommt eben darauf an was du bisher gemacht hast.

          Im Prinzip wäre es mir egal welche Form die ID hat, wenn man die überhaupt so nennen will. Es muss nur hinterher sich ermitteln lassen, welche "Value2" dieselben Werte haben.

          Hab leider keine Erfahrung mit IDREF. Von daher wie müsste ich damit umgehen?

          Das ist relativ unwichtig, wenn du die IDs selbst erzeugst, dann kannst du noch immer gernerate-id() als Wert für den Attribut verwenden.

          Grüße
          Thomas

          1. Hallo Thomas

            Fein, aber ich weiss noch immer nicht was du bisher gemacht hast.
            Ich denke du hast dafür Verständnis, wenn ich nicht alles für dich von Grund auf schreiben will.
            Ich nehme an du verwendest: <xsl:for-each-group group-by="Value1">, du kannst jetzt entweder eine weiter inner gruppierung mchen, oder mit key-arbeiten. Kommt eben darauf an was du bisher gemacht hast.

            Habe das Problem mittlerweile schon auf andere Art gelöst, indem ich im XQUERY was ich vorher benutze um das XML erst mal zu generieren schon "key" Attribute anlege. Es ist richtig, dass ich eine Schleife verwende mit" for-each-group". Die sieht ungefähr so aus:

            <xslt:for-each-group select="//meta" group-by="Value1/text()">

            <xslt:variable name="i" select="position() - 1"/>

            <xslt:variable name="id">
                      <xslt:number level="single" count="meta" format="1"/>
                    </xslt:variable>

            <xslt:for-each select="current-group()">
            ...

            Man hätte also darin noch mal eine Gruppe bilden müssen, die statt nach "Value1" nach "Value2" gruppiert.

            Aber wie gesagt ich habs jetzt doch anders hinbekommen. Danke trotzudem für die Hilfe

            Gruß Marcus

    2. Es ist keine allzugute Idee nur Zahlen als ID zu verwenden.

      Wie ist da gemeint?