Announcement

Collapse
No announcement yet.

zwei for-each Abfragen zusammenfassen

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

  • zwei for-each Abfragen zusammenfassen

    Hallo!
    Ich habe zwei for-each Abfragen welche ich benutze um Daten aus einem XML-File mittels xsltproc in eine Tabelle zu schreiben (INSERT INTO kurvenmessung und INSERT INTO ramcontent). Jede for-each Abfrage funktioniert für sich gesehen super, führt aber nicht zu dem Ergebnis welches ich gerne hätte:
    Ich möchte, dass INSERT INTO kurvenmessung und INSERT INTO ramcontent in einer einzigen for-each-Abfrage stehen, scheitere aber immer an den unterschiedliichen select=""-Pfaden. Kann mir jemand helfen ?

    xsl siehe Anlage
    Attached Files

  • #2
    Ohne die konkreten XML-Daten und das gesuchte Ergebnis kann ich mir das Problem nicht richtig vorstellen.

    Comment


    • #3
      Originally posted by Thomas Meinike View Post
      Ohne die konkreten XML-Daten und das gesuchte Ergebnis kann ich mir das Problem nicht richtig vorstellen.
      Habe die XML-Daten angehängt.
      Problembeschreibung:
      - ich habe ganz viele solcher xml-Files
      - aus jedem xml-file sollen Daten in zwei Tabellen geschrieben werden (mache ich über xslt-proc)
      - führe ich wie bisher zwei getrennte for-each Anweisungen aus werden zuerst ALLE Inhalte aus pulse/measurement gelesen, danach ALLE Inhalte aus result.

      Ich möchte aber, dass es prakitsch immer "hin- und herspringt", d.h. dass heisst er liest die erste pulse/measurement-Kombi, dann den ersten result-Inhalt, dann die zweite pulse/measurement-Kombi, usw.
      Attached Files

      Comment


      • #4
        Wenn ich das Problem richtig verstanden habe, sollte es so laufen:
        Code:
        <xsl:for-each select="/research/sequencelist/sequence/pulse">
        
          <xsl:variable name="pos" select="position()"/>
        
          <xsl:text>INSERT INTO kurvenmessung (p_anodicfirst, m_electrode) VALUES ('</xsl:text>
          <xsl:value-of select="anodicfirst"/>
          <xsl:text>','</xsl:text>
          <xsl:value-of select="following-sibling::measurement/electrode"/>
          <xsl:text>');</xsl:text>
        
          <xsl:for-each select="/research/resultlist/result[$pos]/ramcontentlist/ramcontent">
            <xsl:text>INSERT INTO ramcontent (beforesize, contentsize) VALUES ('</xsl:text>
            <xsl:value-of select="@beforesize"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="@contentsize"/>
            <xsl:text>');</xsl:text>
          </xsl:for-each>
        
        </xsl:for-each>
        Mit Deinen XML-Daten ergibt sich:
        Code:
        INSERT INTO kurvenmessung (p_anodicfirst, m_electrode) VALUES ('0','0');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('22','11111');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('23','11111');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('35','11111');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('34','22222');
        
        INSERT INTO kurvenmessung (p_anodicfirst, m_electrode) VALUES ('1','0');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('33','22222');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('33','22222');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('31','33333');
        INSERT INTO ramcontent (beforesize, contentsize) VALUES ('22','33333');
        Zuletzt editiert von Thomas Meinike; 26.07.2008, 11:33.

        Comment


        • #5
          Vielen herzlichen Dank, das ist genau das was ich haben wollte !
          merci !

          Ich verteh allerdings die Syntax noch net ganz:
          welchen "Ort" habe ich denn genau mit SELECT="position()" ??

          und wie so kommt dann [$pos] bei der zweiten for-each Abfrage ausgerechnet nach RESULT.

          Möchts nur vertehen damit ichs nächstes mal selbst machen kann
          Zuletzt editiert von Binaural; 28.07.2008, 09:25.

          Comment


          • #6
            Es gibt doch zwei unterschiedliche Teilbäume in der Struktur, die nicht miteinander verschachtelt sind. Die aktuelle Position von pulse (im Beispiel 1 bzw. 2) soll mit eben dieser unter result behandelt werden, deshalb wird mit dem in $pos abgelegten Wert auf result[1] und result[2] referenziert.

            Comment

            Working...
            X