Announcement

Collapse
No announcement yet.

Zugriff auf bestimmten Nachfolge-Geschwister-Knoten

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

  • Zugriff auf bestimmten Nachfolge-Geschwister-Knoten

    Hallo,

    als XML- und XSLT-Neuling stehe ich seit kurzem vor einer Menge von Fragen. Hoffe ihr könnt mir bei wahrscheinlich was ganz einfachem weiterhelfen.

    Ein Auschnitt aus der XML-Datei:
    Code:
    <ROW100>
    <PTPT1PTNR>1</PTPT1PTNR><PTPT2KTGRU>3</PTPT2KTGRU><PTPT2KTNAM>barmer</PTPT2KTNAM><PTPT2MART1>1</PTPT2MART1><PTPT2MART2>1</PTPT2MART2><PTPT2MART3>1</PTPT2MART3><PTPT2MART4>1</PTPT2MART4><PTPT2SOFA>1</PTPT2SOFA><PTPT3AUFN>16092010</PTPT3AUFN><PTPT7ENTL>13102010</PTPT7ENTL><PTPT2TAGE>027</PTPT2TAGE><PEPEFA1D1></PEPEFA1D1><PEPEDIAGG>001</PEPEDIAGG><TATSPFLEGETAGE>12</TATSPFLEGETAGE><BASISPFLEGE>60000</BASISPFLEGE><VERPFLEGUNG>12000</VERPFLEGUNG><PAUSCHAL>24000</PAUSCHAL>
    <ROW110>
    <CLCL1GRP>leer</CLCL1GRP><PTPT1PTNR>1</PTPT1PTNR><MEDKO>32825</MEDKO>
    </ROW110>
    <ROW120>
    <CLCL1GRP>001</CLCL1GRP><O0KEY>001</O0KEY><O0VALUE>Therapie</O0VALUE><PTPT1PTNR>1</PTPT1PTNR><MEDKOVARI>5550</MEDKOVARI>
    </ROW120>
    <ROW121>
    <PTPT1PTNR>1</PTPT1PTNR><EINZELKEY>001</EINZELKEY><EINZELLEISTUNG>Therapie</EINZELLEISTUNG>
    </ROW121>
    <ROW121>
    <PTPT1PTNR>1</PTPT1PTNR><EINZELKEY>002</EINZELKEY><EINZELLEISTUNG>Muskelaufbautraining</EINZELLEISTUNG>
    </ROW121>
    <ROW130>
    <PTPT1PTNR>1</PTPT1PTNR><TGLPFLEGEKOSTEN>00297405</TGLPFLEGEKOSTEN>
    </ROW130>
    </ROW100>
    <ROW100>
    ....
    </ROW100>
    Die Anzahl der ROW120 sind variable, in ROW121 steht die maximal mögliche Anzahl und auch die Reihenfolge der Spalten für die spätere Excel-Aufbereitung.
    Um jetzt in Excel die richtigen Spalten zu treffen, möchte ich die ROW120 (sofern vorhanden) mit der ROW121 vergleichen (CL1GRP und EINZELKEY), um so festzustellen, ob ich den Wert in die erste Spalte ( = erste ROW121), die zweite Spalte ( = zweite ROW121) usw. schreiben muss.

    Wie muss ich diesen Vergleich in einem <xsl:if test=""> oder <xsl:choose..> schreiben? Komme da mit den verschiedenen Knotenpunkten und den Achsenbezeichnern noch nicht so zurecht.

    Vielen Dank schon mal im voraus!

  • #2
    Statt if oder choose reicht vermutlich ein template:
    Code:
    <xsl:template match="ROW121[EINZELKEY = preceding-sibling::ROW120/CLCL1GRP]">
      ...
    </xsl:template>
    Ansonsten musst du erklären, wie das Resultat aussehen soll, dass per XSLT erzeugt werden soll

    Comment


    • #3
      Guten Morgen,

      vielen Dank erstmal Martin für deine Antwort. Mit deinem Vorschlag habe ich es leider nicht so hinbekommen wie es ich brauche.

      Ich versuch mal zu beschreiben, wie das Ergebnis aussehen soll (in Excel):

      In einer Überschriftenzeile werden pro Spalte die maximal möglichen Ausprägungen Spalte für Spalte angegeben (entspricht ROW121/EINZELLEISTUNG)
      z.B. Leistung 1 | Leistung 2 | Leistung 3 | Leistung 4 | ....

      Pro Einzelfall (ROW100) stehen in ROW120 die bei diesem Fall vorhandenen Leistungen (MEDKOVARI)
      z.B. Fall 1 hat Leistung 2 und Leistung 3 (nicht 1 und 4)

      -> in Excel soll dann so aussehen
      Leistung 1 | Leistung 2 | Leistung 3 | Leistung 4 | ....
      ------------|1. ROW120 | 2. ROW120 |--------------| ....
      usw.

      Jeder Fall hat keine bis 4 Leistungen, die eben dann in die richtigen Spalten müssen.

      Ich habe es jetzt mal testweise so probiert (angenommen, der Fall hat eine ROW120):
      Code:
      <xsl:if test="ROW120[1]/CLCL1GRP = ROW121[1]/EINZELKEY">										
      	<td align="right">
      		<xsl:value-of select="format-number((ROW120/MEDKOVARI div 100), '#.##0,00 EUR', 'EUR')" />
      	</td>
      	<td align="right">
      		---
      	</td>
      	<td align="right">
      		---
      	</td>
      	<td align="right">
      		---
      	</td>
      </xsl:if>
      <xsl:if test="ROW120[1]/CLCL1GRP = ROW121[2]/EINZELKEY">										
      	<td align="right">
      		---
      	</td>
      	<td align="right">
      		<xsl:value-of select="format-number((ROW120/MEDKOVARI div 100), '#.##0,00 EUR', 'EUR')" />
      	</td>
      	<td align="right">
      		---
      	</td>
      	<td align="right">
      		---
      	</td>
      </xsl:if>
      .....
      Ich weiß, ich weiß, das ist wahrlich kein Meisterwerk, aber es funktioniert ;-).

      Hoffe ich konnte es einigermaßen gut darstellen.
      Gibt es hierfür noch eine elegantere Lösung? Denn im obigen Beispiel gehe ich von 4 Leistungen aus, es können aber von Auswertung zu Auswertung auch mehr oder weniger Leistungen sein.

      Vielen Dank schon mal!

      Comment

      Working...
      X