Announcement

Collapse
No announcement yet.

Elemente mit demselben Attribut extrahieren?

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

  • Elemente mit demselben Attribut extrahieren?

    Hallo,

    ich hab ein kleines XSL-Problem ;-)

    Ich hab XML-Dateien die Elemente der Art

    <token ID="t4">Dieser</token>

    und dazu korrespondierend, weiter unten Elemente der Art

    <tag tokID="t4">PDAT</tag>

    Jetzt muss ich alle token- und tag-Elemente, entsprechend ihren ID- bzw. tokID-Attributen extrahieren. Mit dem ersten (token) Element tue ich mir auch nicht schwer, aber wie kann ich in einer for-each-Schleife dann weiter unten die tag-Elemente ausgeben, bei denen das tokID-Attribut gleich dem ID-Attribut des token-Elements ist? Ich habs mal so probiert, aber das klapt nicht ....:

    <table border="1">
    <xsl:for-each select="//token" >
    <tr>
    <td>
    <xsl:value-of select="text()"></xsl:value-of>
    </td>
    <td>
    <xsl:value-of select ="//tag[@tokID=./@ID]/text()"/>
    </td>
    </tr>
    </xsl:for-each>
    </table>

    (Hoffe, ich konnte mich verständlich ausdrücken und bin für jeden Tipp dankbar :-)

  • #2
    zeig mal die xml datei

    Comment


    • #3
      Originally posted by xml-looser View Post
      zeig mal die xml datei
      Die XML-Dateien bestehen faktisch aus 2 Listen aus token- und tag-Elementen hintereinander:

      <token ID="t4">Dieser</token>
      <token ID="t5">Tisch</token>
      ....
      <tag tokID="t4">PDAT</tag>
      <tag tokID="t5">NN</tag>

      Und die sollen jetzt einfach in einer HTML-Tabelle nebeneinander angezeigt werden.

      Comment


      • #4
        Ich ergänze nochmal: Ich denke, dass der 2. XPath-Ausdruck wohl falsch ist:

        <xsl:value-of select ="//tag[@tokID=./@ID]/text()"/>

        Wenn da jemand eine Idee hätte, was ich da falsch mache - ich möchte das Tag-Element extrahieren welches dieselbe tokID hat wie das korrespondierende token-Element im ID-Attribut.

        Comment


        • #5


          <?xml version="1.0" encoding="UTF-8"?>
          <root>
          <list1>
          <token ID="t4">Dieser</token>
          <token ID="t5">Tisch</token>
          </list1>
          <list2>
          <tag tokID="t4">PDAT</tag>
          <tag tokID="t5">NN</tag>
          </list2>


          </root>




          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
              <xsl:output indent="yes" method="html"/>
              <xsl:template match="/">
                  <html>
                      <body>
                          <xsl:apply-templates select="root"/>
                      </body>
                  </html>
              </xsl:template>
              <xsl:template match="root">
                  <table>
                      <xsl:apply-templates select="list1"/>
                  </table>
              </xsl:template>
              <xsl:template match="list1">
                  <xsl:apply-templates select="token"/>
              </xsl:template>
              <xsl:template match="token">
                  <xsl:variable name="id" select="@ID"/>
                  <tr>
                      <td>
                          <xsl:value-of select="."/>
                      </td>
                      <td>
                          <xsl:value-of select="@ID"/>
                      </td>
                      <td>
                          <xsl:value-of select="$id"/>
                      </td>
                      <td>
                          <xsl:value-of select="//tag[@tokID=$id]"/>
                      </td>
                      
                  </tr>
              </xsl:template>
          </xsl:stylesheet>

          Comment


          • #6
            Wow, vielen Dank, jetzt gehts!!!!!!

            Comment

            Working...
            X