ulli: herausfiltern der attribute

hi ho

... mein xml-document(mit delphi erstellt, deshalb leider fast nur attribute) hat verkürzt folgende struktur:

<ROWDATA>
<ROW id="1" key_mainmenu="8" pfad="" introtext="blalba" key_land="0" />
<ROW id="2" key_mainmenu="2" pfad="" introtext="test" key_land="0" />
...
</ROWDATA>

... ich verwende php 4+ und sablotron ...

meine frage ist nun, wie bekomme ich aus dem xml-dokument den inhalt von introtext heraus, aufgrund einer zuvorerfolgten abfrage von key_mainmenu? ... also etwa: wenn key_mainmenu=8 dann gib introtext aus

meine ansätze waren/sind: (der parameter mainid wird richtig übergeben ... das ist sicher :) )

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="mainid"/>

<xsl:template match="ROWDATA">
    <xsl:if test="ROW[attribute::key_mainmenu=$mainid]">
      <xsl:value-of select="ROW/@introtext" />
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

... bis dann

  1. Hallo ulli!

    Hoffe, das passt so:

    <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="ROWDATA">
        <xsl:param name="mainid"/>
        <xsl:if test="@key_mainmenu='$mainid'">
          <xsl:value-of select="@introtext" />
        </xsl:if>
      </xsl:template>

    </xsl:stylesheet>

    mfg

    norbert =:-)

    1. hi norbert

      <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:template match="ROWDATA">
          <xsl:param name="mainid"/>
          <xsl:if test="@key_mainmenu='$mainid'">
            <xsl:value-of select="@introtext" />
          </xsl:if>
        </xsl:template>

      </xsl:stylesheet>

      leider tut sich nichts ...

      ulli

      1. Hallo ulli!

        1.) Sorry - hab mich verschaut und ROW übersehen:

        <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

        <xsl:template match="ROWDATA">
            <xsl:param name="mainid"/>
            <xsl:if test="ROW/@key_mainmenu='$mainid'">
              <xsl:value-of select="ROW/@introtext" />
            </xsl:if>
          </xsl:template>

        </xsl:stylesheet>

        2.) Du hast erwähnt, dass die Parameterübergabe von mainid funktioniert - teste das Ganze mal mit

        <xsl:if test="ROW/@key_mainmenu='8'">

        mfg

        norbert =:-)

        1. Hallo ulli!

          jo hi

          1.) Sorry - hab mich verschaut und ROW übersehen:

          <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

          <xsl:template match="ROWDATA">
              <xsl:param name="mainid"/>
              <xsl:if test="ROW/@key_mainmenu='$mainid'">

          ich denke, dass sollte <xsl:if test="ROW/@key_mainmenu=$mainid"> heißen  ... ohne ' um $mainid oder?

          <xsl:value-of select="ROW/@introtext" />
              </xsl:if>
            </xsl:template>

          </xsl:stylesheet>

          ... geht zwar ... aber genauso wie mein versuch, es wird immer nur der erste eintrag von introtext ausgegeben

          2.) Du hast erwähnt, dass die Parameterübergabe von mainid funktioniert - teste das Ganze mal mit

          <xsl:if test="ROW/@key_mainmenu='8'">

          ... ja hab ich geht für 8

          ... das die übergabe von $mainid funzt hab ich mit

          <xsl:value-of select="$mainid" />

          nach <xsl:value-of select="ROW/@introtext" /> ausprobiert ... da steht dann als letztes zeichen immer der jeweils richtige wert von mainid

          ... ich glaub xsl mag mich nicht ^^ *g*

          ulli

          1. Hallo ulli!

            Ei ei - jetzt hab ich mich aber blamiert.

            Natürlich bekommst Du nur eine Ausgabe - es gibt ja auch nur eine ROWDATA. Entweder Du machst ein eigenes Template für ROW (wird dann also für jeden ROW-Eintrag durchlaufen) oder du machst eine for-each Schleife innerhalb des ROWDATA-Templates (also bewusstes Abfragen aller ROW)!

            mfg

            norbert =:-)

            1. danke euch beiden ... jetzt funzt es ... werde dann wahrscheinlich später noch mal auf euer wissen zurückkommen :)

              cu ulli

        2. Hi ihr zwei,

          warum nicht einfach:

          <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

          <xsl:template match="ROWDATA">
              <xsl:param name="mainid"/>
              <xsl:value-of select="ROW[@key_mainmenu='$mainid']/@introtext" />
            </xsl:template>

          </xsl:stylesheet>

          Die Parameterübergabe muss natürlich richtig sein.

          Gruß,
          Martin

    2. Hallo,

      <xsl:template match="ROWDATA">
          <xsl:param name="mainid"/>
          <xsl:if test="@key_mainmenu='$mainid'">
            <xsl:value-of select="@introtext" />
          </xsl:if>
        </xsl:template>

      </xsl:stylesheet>

      Verwirrt ihn nicht!
      Dass er einen globalen Parameter verwendet ist besser, so kann er diesen nicht nur in dem einen Template benützen.

      <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:param name="mainid"/>

      <xsl:template match="ROWDATA">
            <xsl:value-of select="ROW[@key_mainmenu = $mainid]/@introtext" />
        </xsl:template>

      </xsl:stylesheet>

      Was er nicht gesagt hat, ob/dass er alle Intortexte braucht und wie er diese dargestellt bekommen will.

      also könnte er auch sowas machen:

      <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:param name="mainid"/>

      <xsl:template match="ROWDATA">
         <xsl:if test="ROW[@key_mainmenu = $mainid]">
        <xsl:call-template name="introtext" />
       </xsl:if>
        </xsl:template>

      <xsl:template name="introtext" match="@introtext">
            <p><xsl:value-of select="." /></p>
        </xsl:template>
      </xsl:stylesheet>

      Grüße
      Thomas