Announcement

Collapse
No announcement yet.

Variablen in if-clausel übernehmen

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

  • Variablen in if-clausel übernehmen

    hallo zusammen,
    ich sitze seit einiger zeit an einem Problem und komm einfach nich dahinter, wie es zu lösen ist.
    also:
    <PRE>
    <xsl:template match="*">
    <xsl:element name="{name()}">
    <xsl:if test="name()='id'">
    <xsl:variable name="B">
    <xsl:apply-templates/>
    </xsl:variable>
    </xsl:if>
    <xsl:if test="substring(.,1,1)='#'">
    <xsl:value-of select = "$B" />
    ...
    </PRE>
    zur erklärung
    ich habe ein xml-dokument in dem ich einen tag "id" habe ... ich möchte den wert aus dem tag herausnehmen und ihn, wenn eine Bestimmte Anforderung erfüllt ist ausgeben...
    Doch es kommt folgende Fehlermeldung:
    "Ein Verweis auf Variable oder Parameter B kann nich gelöst werden. Die Var. bzw. der Prameter ist möglicherweise nicht definiert oder befindet sich ausserhalb des Gültigkeitsbereiches"

    Kann die Variable nicht in die if-clausel übernehmen?
    Wie kann ich das umgehen (die Variable muss ausserhalb definiert werden)
    vielen Dank für die Hilfe!!!
    Manja

  • #2
    Hallo Manja,

    probier mal durch folgenden XPATH die Variable zu belegen:
    <xsl:template match="*">
    <xsl:element name="{name()}">
    <xsl:variable name="B" select="*[name() = 'id']"/>

    <xsl:if test="substring(.,1,1)='#'">
    <xsl:apply-templates select="$B"/>
    ...

    Hoffe das hilft dir weiter

    Mich

    Comment


    • #3
      Ok nochmal in schön

      <pre>
      &lt;xsl:template match="*"&gt;
      &lt;xsl:element name="{name()}"&gt;
      &lt;xsl:variable name="B" select="*[name() = 'id']"/&gt;

      &lt;xsl:if test="substring(.,1,1)='#'"&gt;
      <xsl:apply-templates select="$B"/&gt;
      ...
      </pre>

      Mich

      Comment


      • #4
        Vielen Dank für die Antwort!
        Ich habe es gleich ausprobiert, aber es funktioniert noch nicht ganz.
        zwar ist die Fehlermeldung weg ... aber der Inhalt der Variable wird nicht ausgegeben, als wäre sie nicht vorhanden.
        manj

        Comment


        • #5
          hallo,
          ich versteh das einfach nicht ...
          wenn ich die Variable auf diese Weise bestimme:
          <PRE>
          <xsl:variable name="B" select="*[name()='datei']"/>
          <xsl:if test = "substring(.,1,1)='#'" >
          <xsl:apply-templates select="$B"/>
          ...
          </PRE>
          dann wird sie innerhalb der if-anweisung regelrecht ignoriert ...
          wenn ich sie davor ausgebe, ist es kein problem, ich brauche sie aber in der if-anweisung ...
          wenn ich es so machen:
          <PRE>
          <xsl:variable name="B" select="//datei>
          <xsl:if test = "substring(.,1,1)='#'" >
          <xsl:apply-templates select="$B"/>
          ...
          </PRE>
          wird sie nicht ignoriert und angewendet ...
          so kann ich das aber nicht machen, da mein xml-datei etwa so aufgebaut ist:
          <pre>
          <familie>
          <person>
          <datei>papa.xml</datei>
          <name>#name</name>
          <anschrift>#anschrift</anschrift>
          </person>
          <person>
          <datei>mama.xml</datei>
          <name>#name</name>
          <anschrift>#anschrift</anschrift>
          </person>
          </familie>
          </pre>
          das heisst "datei" kommt mehrmals vor und soll beim durchlauf der teilbäume immer wieder neu belegt werden.
          bitte, ich brauch ganz dringend hilfe.
          welche stylesheets muss ich verwenden? kann es daran liegen?
          grüsse,
          Manj

          Comment


          • #6
            hallo,
            also ich hab das jetzt alles über den haufen geschmissen und eine andere idee entwickelt dazu muss ich aber wissen,ob es möglich ist die psition eines bestimmten knotens zu ermitteln.
            ich möchte die position des knotens Produkt in eine variable packen ... hab bis jetzt nichts gefunden, nur wie man die position des aktuellen knotens ermitteln kann.
            Wäre schön wenn jemand ne idee hat
            Manj

            Comment


            • #7
              hallo,
              vielleicht hilft es jemandem, wenn ich von meinen mühsam erworbenen Fortschritten berichte.
              Also ich habe nun herausgefunden, wie man die Position eines bestimmten Knotens in eine Variable packt
              es geht mit:
              <pre>
              <xsl:variable name="count">
              <xsl:number count="produkt"/>
              </xsl:variable>
              </pre>
              ich lasse mir die Variable danach ausgeben, und sie ändert sich auch, wenn das nächste produkt mit all seinen Kind-Elementen erreicht wird.
              nun möchte ich mit dieser zahl weiterarbeiten.
              Gleich darunter wir eine Variable folgendermassen belegt:
              <pre>
              <xsl:variable name="B">
              <xsl:value-of select="//produkt[$count]/id"/>
              </xsl:variable>
              </pre>
              das problem ist ... diese Variable ändert sich nach dem ersten mal nicht mehr.
              ich weiss, das Variablen in xslt eher wie Konstanten zu behandeln sind, aber warum ändert sich dann die Variable "count"?
              gibt es vielleicht doch eine Möglichkeit, dass sich "B" auch ändert?
              Manja Jande

              Comment


              • #8
                okay, danke an alle die mitgefiebert haben, ich habs geschafft
                die variable "B" muss folgendermassen belegt werden:
                <pre>
                <xsl:variable name="B">
                <xsl:value-of select="//produkt[position()=$count]/id"/>
                </xsl:variable>
                </pre>
                Manj

                Comment

                Working...
                X