Goce: Muss man Online sein?

Hallo Leute,

ich lerne gerade etwas mit XML umzugehen und bin auf Templates gestossen.
Für mich sehen sie aus wie Funktionen, die je nach gebrauch aufgerufen werden.
Ich habe auch einige Beispiele aus Bücher und eigene  ausprobiert und leider klappt es mit den Templates (xsl:apply-templates/) leider nicht.
Auch der neuen MS Parser V4.0 schaft keine Abhilfe.
Funktionieren templates nicht wenn man offline ist?
Genau so ist es auch mit Nummerrierungen, klappt einfach nicht?

Hoffe das ein XML (XSL) Profi online ist der mir da helfen kann.

Danke,
Goce

  1. Hallo Leute,

    ich lerne gerade etwas mit XML umzugehen und bin auf Templates gestossen.
    Für mich sehen sie aus wie Funktionen, die je nach gebrauch aufgerufen werden.
    Ich habe auch einige Beispiele aus Bücher und eigene  ausprobiert und leider klappt es mit den Templates (xsl:apply-templates/) leider nicht.
    Auch der neuen MS Parser V4.0 schaft keine Abhilfe.
    Funktionieren templates nicht wenn man offline ist?
    Genau so ist es auch mit Nummerrierungen, klappt einfach nicht?

    Hoffe das ein XML (XSL) Profi online ist der mir da helfen kann.

    Danke,
    Goce

    Hi,

    Hängt davon ab, was Du mit offline meinst ;)

    XSL ist etwa wie Perl oder PHP eine serverseitige Scriptsprache. Wenn Du einfach von der Festplatte eine Datei öffnest, klappt das natürlich nicht. Damit das auch 'offline' läuft, brauchst Du einen Server wie Apache (www.apache.org), OmniHTTPd (www.omnicron.ca) oder Xitami (www.xitami.com) - alle diese Produkte sind kostenlos.

    Gruß, Pawel

    1. Hallo,

      XSL ist etwa wie Perl oder PHP eine serverseitige Scriptsprache.

      hm, mit einer Scriptsprache hat es nur entfernte Ähnlichkeit, XSL besitzt ähnliche Konstrukte (z.B. if-Verzweigungen) wie auch Scriptsprachen, aber es dient zur Transformation von XML in andere XML-Formate oder auch HTML.

      Wenn Du einfach von der Festplatte eine Datei öffnest, klappt das natürlich nicht. Damit das auch 'offline' läuft, brauchst Du einen Server wie Apache (www.apache.org), OmniHTTPd (www.omnicron.ca) oder Xitami (www.xitami.com) - alle diese Produkte sind kostenlos.

      sorry, aber das ist schlichtweg falsch. XSL wird zwar häufig serverséitig eingesetzt, aber mit einem WEB-Server hat das nix zu tun. Du benötigst einen XSLT-Prozessor. Im IE ist einer integriert, du kannst also direkt im IE testen

      Goce: Schau mal ins Archiv, dort gibt es eine Menge links zu dem Thema.

      Ansonsten: Was ist konkret dein Problem, was hast du versucht und wo genau bist du gescheitert. Nur so kann dir jemand wirklich helfen

      Ciao
      Franz

  2. hallo,

    Ich habe auch einige Beispiele aus Bücher und eigene  ausprobiert und leider klappt es mit den Templates (xsl:apply-templates/) leider nicht.
    Auch der neuen MS Parser V4.0 schaft keine Abhilfe.

    was genau funktioniert nicht?
    quellcode?

    Funktionieren templates nicht wenn man offline ist?

    wenn du es im IE 5+ und mit msxml4 versuchtst, dann geht es auch offline.

    Genau so ist es auch mit Nummerrierungen, klappt einfach nicht?

    was genau funktioniert nicht?
    quellcode?

    grüße
    thomas

  3. XML-DATEI:

    <?xml version="1.0" ?>
    <?xml:stylesheet href="zeigen.xsl" type="text/xsl" ?>
    <!DOCTYPE test [
    <!ELEMENT test (datensatz)+>
    <!ELEMENT datensatz (name, alter?)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT alter (#PCDATA)>
    <!ATTLIST name id ID #REQUIRED>
    ]>
    <test>

    <datensatz>
    <name id="1">Thomas</name>
    <alter>20</alter>
    </datensatz>

    <datensatz>
    <name id="2">Michael</name>
    <alter>23</alter>
    </datensatz>

    <datensatz>
    <name id="3">Angela</name>
    <alter>17</alter>
    </datensatz>

    </test>

    -------------------

    XSL-DATEI:

    <?xml version="1.0" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

    <xsl:template name="listen">
    <xsl:for-each select="test/datensatz">
    <xsl:value-of select="name"/><br/>
    </xsl:for-each>
    </xsl:template>

    <html>
    <body>

    <xsl:apply-templates select="listen">
    </xsl:apply-templates>

    </body>
    </html>
    </xsl:stylesheet>

    ------------------------------------

    Das Problem mit dem apply template glaube ich gelöst zu haben ich hatte nach den templates ein <xsl:template match="/">. als ich es gelöscht habe hats funktioniert.
    Doch das mit dem sortieren nach namen geht nicht.

    Es klappt nur order-by="+ name" eingesetzt im for-each tag.

    Hoffe das jemand von euch eine Lösung hat.

    Nun habe ich ne neue frage:
    Wenn ich einen einen link baue mit:
    <a><attribute name="href">#</attribute>..blabla.. </a>
    und mir je nachdem auf welchen link ich drücke er mir nur von diesem datensatz das alter ausspuckt (ein bestimmtes apply-templates aufruft.)
    Wie verwende ich da ID und wo wird es eingetragen???

    Hintergrund:
    ich liste alle namen auf und mache gleichzeitig daraus links.
    bei click auf einen namen soll das zugehörige alter angezeigt werden, am besten soll die seite auch neu geladen werden.
    bei html spricht man anker mit #>ankername> an. Wie sieht es bei xsl aus???

    Danke!

    1. Hallo,

      das problem ist: du verwendest die alte unbd ungültige syntax von microsoft.
      xml datei:
      <?xml version="1.0" ?>
      <!DOCTYPE test [
      <!ELEMENT test (datensatz)+>
      <!ELEMENT datensatz (name, alter?)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT alter (#PCDATA)>
      <!ATTLIST name id ID #REQUIRED>
      ]>
      <?xml-stylesheet href="goce.xsl" type="text/xsl" ?>
      <test>

      <datensatz>
      <name id="1">Thomas</name>
      <alter>20</alter>
      </datensatz>

      <datensatz>
      <name id="2">Michael</name>
      <alter>23</alter>
      </datensatz>

      <datensatz>
      <name id="3">Angela</name>
      <alter>17</alter>
      </datensatz>

      </test>
      --------

      xsl datei:
      <?xml version="1.0" ?>
      <!-- der namespace hier muss richtig sein, deine war die alte -->
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
      <html>
      <body>
      <xsl:apply-templates />
      </body>
      </html>
      </xsl:template>

      <xsl:template match="test">
      <xsl:for-each select="datensatz">
      <xsl:sort select="name" />
      <p><xsl:value-of select="name"/></p>
      </xsl:for-each>
      </xsl:template>

      </xsl:stylesheet>

      -----------

      Nun habe ich ne neue frage:
      Wenn ich einen einen link baue mit:
      <a><attribute name="href">#</attribute>..blabla.. </a>
      und mir je nachdem auf welchen link ich drücke er mir nur von diesem datensatz das alter ausspuckt (ein bestimmtes apply-templates aufruft.)
      Wie verwende ich da ID und wo wird es eingetragen???

      das hast zwei teile:
      erstens das einfache:
      <xsl:for-each select="datensatz">
      <xsl:sort select="name" />
      <p>
         <a>
            <xsl:attribute name="href">goce.xml?<xsl:value-of select="name/@id" /></xsl:attribute>
            <xsl:value-of select="name"/>
         </a>
      </p>

      </xsl:for-each>

      zweitens, dass geht so nur, wenn du in deiner XSL Datei auch einen paramter auf "id" setzt und diese abfragst, etwa so:

      <?xml version="1.0" ?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:param name="alter" select="''" />

      <xsl:template match="/">
      <html>
      <body>
      <xsl:apply-templates />
      </body>
      </html>
      </xsl:template>

      <xsl:template match="test">
      <xsl:for-each select="datensatz">
      <xsl:sort select="name" />
      xsl:choose
         <xsl:when test="$alter = name/@id">
            <p>
               <xsl:value-of select="name[@id = $alter]"/> ist <xsl:value-of select="alter" />
            </p>
         </xsl:when>
         xsl:otherwise
            <p>
               <a>
                  <xsl:attribute name="href">goce.xml?alter=<xsl:value-of select="name/@id" /></xsl:attribute>
                  <xsl:value-of select="name"/>
               </a>
            </p>
         </xsl:otherwise>
      </xsl:choose>
      </xsl:for-each>
      </xsl:template>

      </xsl:stylesheet>

      ----
      dann sieht ein link z.B. so aus:
      http://localhost/test/goce.xml?alter=1

      ud wird diese html datei erzeugt:

      <html>
      <body>
      <p><a href="goce.xml?alter=3">Angela</a></p>
      <p><a href="goce.xml?alter=2">Michael</a></p>
      <p>Thomas ist 20</p>
      </body>
      </html>

      deshalb localhost, weil der interne parser im IE diese abfrage nicht kann. also musste ich es mit einem anderen programm testen (das war cocoon und er geht nur online, also serverseitig)

      allerdings du kannst auch JavaScript einsetzten um den IE dazu zu bewegen, deine wünsche auszuführen. da kann ich dir aber nicht weiterhelfen.

      grüße
      thomas

      1. Hallo Thomas!

        Vielen, vielen Dank für Deine Hilfe. Jetzt sehe ich die Sache einwenig klarer. Ich denke das ich damit sehr weit kommen kann.

        Vielen Dank nochmal,
        Goce :-)))