Announcement

Collapse
No announcement yet.

value-of select über verschiedene Knoten

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

  • value-of select über verschiedene Knoten

    Hallo, bin neue hier und habe schon ein paar Beiträge durchforstet aber immer noch keinen Lösungsansatz für folgendes gefunden:
    ich habe ein XML-File: <pulse> und <measurement> widerholen sich und haben teilweise gleiche Inhalte(z.B. <amplitude>, <lag unit>)

    <Sequencelist>
    <Sequence iterations="50">
    <pulse shape="aa">
    <lag unit="s">0.02</lag>
    <phaseduration unit="s">3e-05</phaseduration>
    <amplitude unit="V">0</amplitude>
    < /pulse>
    <measurement type="nrt">
    <lag unit="s">0.00015</lag>
    <amplitude unit="V">0</amplitude>
    </measurement>
    <pulse shape="ab">
    <lag unit="s">0.02</lag>
    <phaseduration unit="s">3e-05</phaseduration>
    <amplitude unit="V">0</amplitude>
    </pulse>
    <measurement type="nrt">
    <lag unit="s">0.00015</lag>
    <amplitude unit="V">0</amplitude>
    </measurement>
    </Sequence>
    </Sequencelist>

    Ich will mittels xslt nun Inhalte aus <pulse> und <measurement> rausziehen und später per xsltproc in ne Postgres Datenbank schreiben. So sieht meine geschriebene xsl-Datei aus:

    <xsl:for-each select="/Sequencelist/Sequence">
    <xsl:text>INSERT INTO Sequence (p_lag_unit, p_amplitude, p_phaseduration, m_lag_unit, m_amplitude) VALUES ('</xsl:text>
    <xsl:value-of select="pulse/@shape"/><xsl:text>','</xsl:text>
    <xsl:value-of select="pulse/lag"/><xsl:text>','</xsl:text>
    <xsl:value-of select="pulse/phaseduration"/><xsl:text>','</xsl:text>
    <xsl:value-of select="pulse/amplitude"/><xsl:text>','</xsl:text>
    <xsl:value-of select="measurement/lag"/><xsl:text>','</xsl:text>
    <xsl:value-of select="measurement/amplitude"/>
    <xsl:text>');</xsl:text>
    </xsl:for-each>

    letzendlich sollten nun 2 Zeilen in meine Tabelle geschrieben werden: eine für die erste measurement/pulse-Kombination, eine für die zweite. Ich bekomme aber nur eine Zeile zurückgeliefert. Es scheint, dass nur die ersten beiden <pulse> und <measurement> "gelesen" werden.

    Ich denke dass es an dem SELECT bei for-each liegt. Wenn ich den Pfad weiter einschränke, z.B. auf "/Sequencelist/Sequence/pulse" und bei value-of select das pulse (damit aber auch konsequenterweise das measurement) wegnehme gibt er 2 Zeilen zurück. Dann aber entsprechen die letzten beiden Werte von lag und amplitude denen aus <pulse> und nicht wie gefordert aus <measurement>

    Weiß jemand Rat ?

  • #2
    Es bieten sich diese Möglichkeiten:
    Code:
    <xsl:for-each select="/Sequencelist/Sequence/pulse">
    
      <!-- Abfragen zu den Kindelementen von pulse -->
      <!-- Abfragen zu following-sibling::measurement/... -->
    
    </xsl:for-each>
    oder
    Code:
    <xsl:template match="/Sequencelist/Sequence">
    
      <!-- Abfragen zu pulse[1]/... und measurement[1]/... -->
      <!-- Abfragen zu pulse[2]/... und measurement[2]/... -->
    
    </xsl:template>

    Comment


    • #3
      vielen Dank, funktioniert perfekt

      Comment

      Working...
      X