Katja: Kriege Output nicht hin...

Hallo zusammen,
Ich glaube ich habe XPath noch nicht so ganz verstanden?!
Ich arbeite mit "apply-templates", aber kriege meinen
gewuenschten Output einfach nicht hin.
Bezogen auf unten aufgefuehrten Baum moechte ich folgenden
Output erzeugen:

123456 1.1
123456 2.2

Und zwar soll als erstes die Tel.Nr des Kunden (in diesem
Fall desjenigen mit der Nr 74614) erscheinen. Dann moechte
ich aus dem zu diesem Kunden dazugehoerigen <ElementC>,
dessen <Typ> Element den Wert "Gegenwaertig" enthaelt,
die Werte aus den Elementen <Versicherung> und <Steuern>
ausgeben - aber jeweils in einer neuen Zeile (s. Bsp. oben).
Und jeweils wieder mit der TelNr. davor.
Hmm... ziemlich verworren - waere aber super dankbar wenn
mir trotzdem jemand helfen koennte.
Gruss, Katja

<Root>
  <Element1>
    <Element2>
 <Kunde>
   <Nr>74613</Nr>
   <TelNr>654321</TelNr>
 </Kunde>
 <Kunde>
   <Nr>74614</Nr>
   <TelNr>123456</TelNr>
 </Kunde>
    </Element2>
  </Element1>

<ElementA>
    <ElementB>
 <ElementC>
   <Kunde_Nr>74614</Kunde_Nr>
   <Versicherung>0.0</Versicherung>
   <Steuern>0.0</Steuern>
   <Typ>Vorgeschlagen</Typ>
 </ElementC>
 <ElementC>
   <Kunde_Nr>74614</Kunde_Nr>
   <Versicherung>1.1</Versicherung>
   <Steuern>2.2</Steuern>
   <Typ>Gegenwaertig</Typ>
 </ElementC>
     </ElementB>
  </ElementA>
</Root>

  1. Aehm... also hier der Baum nochmal richtig formatiert:

    <Root>
      <Element1>
        <Element2>
         <Kunde>
          <Nr>74613</Nr>
          <TelNr>654321</TelNr>
         </Kunde>
         <Kunde>
          <Nr>74614</Nr>
          <TelNr>123456</TelNr>
         </Kunde>
        </Element2>
      </Element1>

    <ElementA>
        <ElementB>
          <ElementC>
            <Kunde_Nr>74614</Kunde_Nr>
            <Versicherung>0.0</Versicherung>
            <Steuern>0.0</Steuern>
            <Typ>Vorgeschlagen</Typ>
          </ElementC>
          <ElementC>
            <Kunde_Nr>74614</Kunde_Nr>
            <Versicherung>1.1</Versicherung>
            <Steuern>2.2</Steuern>
            <Typ>Gegenwaertig</Typ>
          </ElementC>
        </ElementB>
      </ElementA>
    </Root>

  2. hallo,

    Ich glaube ich habe XPath noch nicht so ganz verstanden?!
    Ich arbeite mit "apply-templates", aber kriege meinen
    gewuenschten Output einfach nicht hin.
    Bezogen auf unten aufgefuehrten Baum moechte ich folgenden
    Output erzeugen:

    123456 1.1
    123456 2.2

    -------- die xsl datei -------
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/Root">
       <html>
       <head></head>
          <body>
             xsl:apply-templates/
          </body>
       </html>
    </xsl:template>
    <xsl:variable name="knum" select="//Kunde_Nr" />

    <xsl:template match="Element1/Element2/Kunde">
    <table border="1">
       <tr>
          <th>kunden nummer</th>
          <th>tel nummer</th>
          <th>versicherung</th>
          <th>steuer</th>
       </tr>
       <tr>
          <td><xsl:value-of select="Nr" /></td>
          <td><xsl:value-of select="TelNr" /></td>
          <td>
             <xsl:if test="Nr = $knum">
                <xsl:for-each select="$knum/../Typ">
                   <xsl:if test="contains(current(),'Gegenwaertig')">
                      <xsl:value-of select="../Versicherung" />
                   </xsl:if>
                </xsl:for-each>
             </xsl:if>
          </td>
          <td>
             <xsl:if test="Nr = $knum">
                <xsl:for-each select="$knum/../Typ">
                   <xsl:if test="contains(current(),'Gegenwaertig')">
                      <xsl:value-of select="../Steuern" />
                   </xsl:if>
                </xsl:for-each>
             </xsl:if>
          </td>
       </tr>
    </table>
    </xsl:template>
    <xsl:template match="text()"></xsl:template>
    </xsl:stylesheet>
    -------------------------------------------------------------
    möglich, dass es eine bessere lösung gibt, mir ist aber nichts dazu eingefallen.

    -----
    und jetzt etwas kritik:
    hier wird dir gerne geholfen, falls man/frau dazu in der lage ist ...
    da es bei deinen fragen sich nicht um detailfragen handelt, kann man dir nur (muss man dir) eine mögliche gesamtlösung geben. ...
    ...nur ich habe bei deinen daten das gefühl, dass du es für deinen job brauchst und - verzeih bitte- aber wie es mir scheint, bist damit etwas überfordert.
    sollte meine annahme zutreffen, sollte dir deine firma wenn schon keinen kurs, aber zumindest einige gute xslt bücher bezahlen.

    nichts für ungut! wie gesagt, man/frau hilft hier gerne, aber niemand wird lange und gern den job eines anderen in seiner freizeit machen.

    grüße
    thomas
    ps: mein posting soll dich nicht davon abhalten weiter fragen zu stellen, wenn du hilfe brauchst.

    1. Hallo Thomas!

      möglich, dass es eine bessere lösung gibt, mir ist aber nichts dazu eingefallen.

      Meiner bescheidenen Meinung nach würde das ganze mit IDs einfacher funktionieren ?!? Die //Nr einfach als ID von //Kunde deklarieren, und dann als IDREF in Kunde_Nr referenzieren. Dann könnte man in XSLT doch ganz einfach mit id() die Telefonnr des zugehörigen Kunden ausforschen ... rein hypothetisch, getestet hab ichs nicht, und allzu firm bin ich in XSLT ja auch noch nicht ;-)

      da es bei deinen fragen sich nicht um detailfragen handelt, kann man dir nur (muss man dir) eine mögliche gesamtlösung geben. ...

      Ich will dir nicht in den Rücken fallen, aber ich finde Katja hat eine durchaus detaillierte Frage gestellt. Sie hat das Problem ausreichend beschrieben, den Quellcode gepostet, damit man sich den Kontext des Problems besser vergegenwärtigen kann, und gefragt wie sie es anstellen soll, damit der gewünschte Output dabei rauskommt. Eigentlich eine perfekte Frage *fg*. Es fällt mir auf die schnelle nicht ein wie man es Formulieren hätte können, dass keine "Gesamtlösung" erforderlich gewesen wäre.

      Abgesehen davon werden meine Augen immer ganz gross wenn du eine deiner Gesamtlösungen publizierst ;-)

      ...nur ich habe bei deinen daten das gefühl, dass du es für deinen job brauchst und - verzeih bitte- aber wie es mir scheint, bist damit etwas überfordert.

      sollte meine annahme zutreffen, sollte dir deine firma wenn schon keinen kurs, aber zumindest einige gute xslt bücher bezahlen.

      Tja, so gehts mir auch beizeiten, nur wird mir sicher meine Firma keinen XSLT-Kurs bezahlen, frei nach dem Motto "Wieso, XSLT? was issn das überhaupt, brauchma des? Ich hab gedacht du kannst des eh alles?" Leider arbeitet nicht jeder in einer Internet-Firma :-(

      lg bernhard

      1. Hallo Berhard,

        gibt's dich denn noch? *g*

        möglich, dass es eine bessere lösung gibt, mir ist aber nichts dazu eingefallen.

        Meiner bescheidenen Meinung nach würde das ganze mit IDs einfacher funktionieren ?!? Die //Nr einfach als ID von //Kunde deklarieren, und dann als IDREF in Kunde_Nr referenzieren. Dann könnte man in XSLT doch ganz einfach mit id() die Telefonnr des zugehörigen Kunden ausforschen ...

        ok, aber wie willst du das bewerkstelligen? wenn du die xml datei hast die katja hat?
        generate-id() geht hier ja nicht. copy-of würde auch nichts bringen.
        ich kann die xml datei ja nicht ändern ;-)

        da es bei deinen fragen sich nicht um detailfragen handelt, kann man dir nur (muss man dir) eine mögliche gesamtlösung geben. ...

        Ich will dir nicht in den Rücken fallen, aber ich finde Katja hat eine durchaus detaillierte Frage gestellt.

        detaillierte frage != detailfrage.

        »»Eigentlich eine perfekte Frage *fg*.

        für eine detaillierte frage zweifels ohne.

        schöne grüße
        thomas

        1. Hi Thomas!

          gibt's dich denn noch? *g*

          jaja, freilich! War nur kurz mal um die Ecke ... ähm ... Zigaretten kaufen *fg* ;-)

          ok, aber wie willst du das bewerkstelligen? wenn du die xml datei hast die katja hat?
          generate-id() geht hier ja nicht. copy-of würde auch nichts bringen.
          ich kann die xml datei ja nicht ändern ;-)

          och, naja, dann wirds blöd, wenn sie die Datei nicht ändern kann siehts ziemlich düster aus :-(

          detaillierte frage != detailfrage.

          Ach, immer diese Geistewissenschaftler! *bbrrrr* Definitionsgschichteln *haarezubergestehn* ;-)

          (schweiss)badende Grüsse aus Wien,
          Bernhard

    2. Hallo Thomas,
      erstmal vielen Dank fuer Deine Loesung, Du scheinst ja hier echt der absolute XSL-Experte zu sein. :)
      Werde etwas Zeit brauchen, bis ich sagen kann ob's geklappt hat, da das Gesamtproblem ziemlich komplex ist und ich versuchen muss, diese "Teilloesung" irgendwie zu integrieren.

      da es bei deinen fragen sich nicht um detailfragen handelt, kann man dir nur (muss man dir) eine mögliche gesamtlösung geben. ...

      Sorry, wie gesagt, das war eigentlich nur ein Teil eines viel komplexeren Problems. Ich habe schon versucht, die Geschichte auf's Minimum "zusammenzustauchen". Mehr geht glaube ich nicht.

      ...nur ich habe bei deinen daten das gefühl, dass du es für deinen job brauchst

      Jain. Mache gerade ein Praktikum und hatte mir auch schon ueberlegt, ob es okay ist, Fragen bezueglich der Arbeit zu stellen. Habe dann beschlossen dass "ja", weil:

      • dieser Job schon lange von einem professionellen Programmierer erledigt wurde. Ich habe das Ding nur zum "austoben" bekommen, es wird also, wenn ich damit fertig bin (was nie der Fall sein wird), im Muell landen und dieser Firma nicht zugute kommen. (Ich werde sowieso nicht bezahlt)
      • wie so oft bei Praktika der Fall, hier niemand wirklich Zeit hat, mir mal was zu erklaeren, ich mich also ganz alleine damit beschaeftige
      • ich wegen oben genannter Aspekte der Meinung bin, dass kein Unterschied darin besteht, ob ich nun "auf der Arbeit" alleine vor'm Rechner sitze und nicht weiter weiss und mir im Netz der Netze Hilfe hole - oder zu Hause.

      Von Deinen oder anderen Antworten im Forum profitiere ich nur, indem mir im besten Falle ein Licht aufgeht.
      Aber ich glaube ehrlich gesagt auch, dass so einige Fragen die in Foren gestellt werden, Jobbezogen sind. Ist ja naheliegend, man sitzt ja eh schon am Rechner...

      und - verzeih bitte- aber wie es mir scheint, bist damit etwas überfordert.

      Jo... das glaube ich auch! Aber dazu sind Praktika ja da, um sowas herauszufinden. Also keine Angst, ich werde mich hinterher nicht als Pseudoprogrammiererin irgendwo einschleichen - das hier reicht mir erstmal. ;)

      nichts für ungut!

      Noe, kein Ding.
      Ciao, Katja

      1. hallo katja,

        Du scheinst ja hier echt der absolute XSL-Experte zu sein. :)

        das ist ein absolut trügerischer schein.

        Jain. Mache gerade ein Praktikum

        alles klar. sowas ähnliches dachte ich auch.

        • ich wegen oben genannter Aspekte der Meinung bin, dass kein Unterschied darin besteht, ob ich nun "auf der Arbeit" alleine vor'm Rechner sitze und nicht weiter weiss und mir im Netz der Netze Hilfe hole - oder zu Hause.

        klar.

        grüße
        thomas