Hannes: XPATH Ausdruck gesucht

Hi Folks!

Mein XML sieht so aus:

<Inhalt>
 <Text id="0" field="cover" width="100"></Text>
 <Text id="1" field="xxx" width="100"></Text>
 <Text id="2" field="yyyy" width="100"></Text>
</Inhalt>

Meine XSL soll nun die 'width' auslesen, bei welcher 'field' = cover ist.

Ich komme nicht darauf und sitze grad wohl im Loch ;-)

Jemand eine Idee?

Meine Ansatz ging in die Hose

Inhalt/Text[@field='cover' and @width]
Inhalt/Text[@field='cover']/[descendant::@width]

  1. Hallo!

    <Inhalt>
    <Text id="0" field="cover" width="100"></Text>
    <Text id="1" field="xxx" width="100"></Text>
    <Text id="2" field="yyyy" width="100"></Text>
    </Inhalt>

    Meine XSL soll nun die 'width' auslesen, bei welcher 'field' = cover ist.

    Inhalt/Text[@field='cover']/@width

    Meine Ansatz ging in die Hose

    Inhalt/Text[@field='cover' and @width]

    Das liefert Dir nur alle Elemente <Text>, die ein field-Attribut mit dem Wert "cover" und ein Width-Attribut besitzen.

    Inhalt/Text[@field='cover']/[descendant::@width]

    Das liefert Dir alle Kindelemente (nicht Attribute!) eines Text-Elements mit dem Attribut field="cover", die ein Attribut width besitzen.

    Viele Grüße,
    Christian

    1. Danke für deine Hilfe.

      Ich hatte das auch schon probiert, allerdings direkt an der Position und nicht wie ich es jetzt gemacht habe, über eine Variable.

      <xsl:variable name="widthall"><xsl:value-of select="Inhalt/Text[@textfield='cover']/@width" /></xsl:variable>

      ...

      <fo:simple-page-master master-name="template1" page-width="{$widthall}mm" page-height="50mm">

  2. Hi Hannes!

    Grundsätzlich ist es nicht egal, wo du gerade in der Knotenhirarchie stehst.
    Ich gebe mal eine (doppelte) mögliche Lösung an, die davon ausgeht, dass Inhalt der root Knoten ist (stylesheet tagging spar ich mir):

    <xsl:template match="/">
    <html>
     <head>
      <title>relational</title>
     </head>
     <body>
      <xsl:apply-templates />
      <pre><xsl:value-of select="//Text[@field='cover']/@width" /></pre>
     </body>
    </html>
    </xsl:template>

    <xsl:template match="Text">
    <xsl:if test="./@field = 'cover'">
     <p><xsl:value-of select="./@width"/></p>
    </xsl:if>
    </xsl:template>

    Grüsse,
    Richard