Announcement

Collapse
No announcement yet.

XSL

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

  • XSL

    <p>Eine Frage zum Thema XSL: Ist es möglich über das DOM auf XSL Elemente zuzugreifen, um z.B. Patterns zur Laufzeit zu modifizieren?<br>
    Falls das nicht der Fall ist, erscheint mir XSL doch ein wenig statisch.
    </p>

  • #2
    Hallo zusammen,
    Ich möchte in meinem, in der DTD so definierten Tag, eine unterschiedliche Ausgabe für Text2 und geaendert erzeugen.

    DTD:
    <!ELEMENT Abschnitt2 (Ueberschrift2, Text2+)>
    <!ELEMENT Ueberschrift2 (#PCDATA)>
    <!ELEMENT Text2 (#PCDATA | geaendert)*>
    <!ELEMENT geaendert (#PCDATA)>

    XSL:
    <xsl:for-each select=" Anweisung/Abschnitt2">
    <DIV CLASS="ueber1">
    <xsl:value-of select ="Ueberschrift2"/>
    </DIV>
    <BR/>
    <PRE CLASS="text">
    <xsl:value-of select="Text2"/>
    </PRE>
    </xsl:for-each>

    xml:
    <Abschnitt2><Ueberschrift2>Verteiler:</Ueberschrift2>
    <Text2>Hier stehts
    <geaendert>HALLO</geaendert>
    zwischen</Text2>
    </Abschnitt2>

    Ich möchte nun den Text HALLO in einem anderen Format augeben als in der zugewiesenen class="text".
    Ich weiß aber nicht wie es geht?!
    Es soll im IE5 dargestellt werden!

    Gruß
    Haral

    Comment


    • #3
      Hallo zusammen,
      Ich möchte in meinem, in der DTD so definierten Tag, eine unterschiedliche Ausgabe für Text2 und geaendert erzeugen.

      DTD:
      !ELEMENT Abschnitt2 (Ueberschrift2, Text2+)
      !ELEMENT Ueberschrift2 (#PCDATA)
      !ELEMENT Text2 (#PCDATA | geaendert)*
      !ELEMENT geaendert (#PCDATA)

      XSL:
      <xsl:for-each select=" Anweisung/Abschnitt2">
      <DIV CLASS="ueber1">
      <xsl:value-of select ="Ueberschrift2"/>
      </DIV>
      <BR/>
      <PRE CLASS="text">
      <xsl:value-of select="Text2"/>
      </PRE>
      </xsl:for-each>

      xml:
      <Abschnitt2><Ueberschrift2>Verteiler:</Ueberschrift2>
      <Text2>Hier stehts
      <geaendert>HALLO</geaendert>
      zwischen</Text2>
      </Abschnitt2>

      Ich möchte nun den Text HALLO in einem anderen Format augeben als in der zugewiesenen class="text".
      Ich weiß aber nicht wie es geht?!
      Es soll im IE5 dargestellt werden!

      Gruß
      Haral

      Comment


      • #4
        <p>Hallo zusammen,
        Ich möchte in meinem, in der DTD so definierten Tag, eine unterschiedliche Ausgabe für Text2 und geaendert erzeugen.
        Aus Gründen der besseren Anziege habe ich beim code die spitzen Tagklammern weggelassen. Ich hoffe dieser bleibt trozdem lesbar!</p>
        <br>
        <p>DTD:<br>
        !ELEMENT Abschnitt2 (Ueberschrift2, Text2+)<br>
        !ELEMENT Ueberschrift2 (#PCDATA)<br>
        !ELEMENT Text2 (#PCDATA | geaendert)*<br>
        !ELEMENT geaendert (#PCDATA)<br>
        </P>
        <p>XSL:<br>
        xsl:for-each select=" Anweisung/Abschnitt2"<br>
        DIV CLASS="ueber1"<br>
        xsl:value-of select ="Ueberschrift2"/<br>
        /DIV<br>
        PRE CLASS="text"<br>
        xsl:value-of select="Text2"/<br>
        /PRE<br>
        /xsl:for-each<br>
        </P>
        <br>
        <p>xml:<br>
        <Abschnitt2><Ueberschrift2>Verteiler:</Ueberschrift2><br>
        <Text2>Hier stehts<br>
        <geaendert>HALLO</geaendert><br>
        zwischen</Text2><br>
        </Abschnitt2><br></p>
        <p>
        Ich möchte nun den Text HALLO in einem anderen Format augeben als in der zugewiesenen class="text".
        Ich weiß aber nicht wie es geht?!
        Es soll im IE5 dargestellt werden!</p>

        Gruß
        Haral

        Comment


        • #5
          Hallo,

          Du musst dabei etwas anders vorgehen:

          xsl:for-each select=" Anweisung/Abschnitt2"
          DIV CLASS="ueber1"
          xsl:value-of select ="Ueberschrift2"/
          /DIV
          <b>xsl:apply-templates /</b>
          /xsl:for-each

          <b>xsl:template match=Text2"
          pre class="text"
          xsl:apply-templates /
          pre
          /xsl:template

          xsl:template match="geaendert"
          ...
          xsl:apply-templates /
          ...
          /xsl:template</b>

          Wenn man das so kodiert, wie in Deinem Beispiel, bewegt man sich in einem sehr starren Rahmen (ziemlich unXSLig
          Mit <b>xsl:apply-templates</b> unterbrichst Du sozusagen diese starre Reihenfolge und veranlasst den Prozessor ab diesem Knoten nach passenden Formatvorlagen zu suchen.
          Das Kopieren von Text z.B. wird eigentlich über eine eingebaute Vorlage abgefangen, die einfach jegliche Textnodes ohne Formatierung cloned, das Ding hat dann so eine Art Wildcardpattern, das in der Hierarchie der passenden Templates den letzten Platz annimmt.

          Konnte Dir hoffentlich weiterhelfen?
          Gruß,

          Clau

          Comment


          • #6
            Ups - hab' ganz vergessen, wie der hier formatiert

            Clau

            Comment

            Working...
            X