Announcement

Collapse
No announcement yet.

XML in HTML umwandeln - Anfänger hat Problem mit xsl

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

  • XML in HTML umwandeln - Anfänger hat Problem mit xsl

    vorweg der Hinweis, dass ich dieses Problem bereits in einem anderen Forum gepostet habe, aber bis jetzt noch nicht wirklich weitergekommen bin und die Zeit etwas drängt. Ich bitte um Nachsicht und Verständnis. Danke.

    Ich soll eine XML-Datei in ein HTML-Dokument umsetzen, und habe nur Grundkenntnisse und noch keine Erfahrungen.

    Diese XML-Struktur liegt mir vor:

    HTML Code:
    <OTA_TourInformationNotifRQ xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05  CTH_TourInformationNotifRQ.xsd" EchoToken="12345" TimeStamp="2008-03-27T15:52:00" Version="1.000" Target="Test">
    <!--  -->
      <POS>
        <Source>
          <RequestorID ID="XYZ" Type="11">
            <CompanyName CompanyShortName="CTH">Name des Reiseveranstalters</CompanyName>
           </RequestorID>
         </Source>
        </POS>
        <TourInformationItems>...</TourInformationItems>
    </OTA_TourInformationNotifRQ>
    In einem ersten Versuch möchte ich nur das Element "CompanyName" in einem H1-Tag ausgeben und habe dafür dieses Stylesheet erstellt:

    HTML Code:
    <?xml version="1.0" encoding="iso8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:template match="/">
      <xsl:apply-templates />
    </xsl:template>
    
    <xsl:template match="/OTA_TourInformationNotifRQ/POS/Source/RequestorID/CompanyName">
      <h1><xsl:value-of select="." /></h1>
    </xsl:template>
    </xsl:stylesheet>
    Im Ergebnis wird mir aber der gesamte Inhalt der XML-Datei ausgegeben, wobei das Element "CompanyName" nicht mit dem H1-Tag ausgezeichnet ist.

    Was mache ich falsch?

    Gruß, Johannes.
    Zuletzt editiert von jochla; 04.05.2011, 10:29.

  • #2
    Probier es mal mit:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xslutput method="html" encoding="UTF-8" indent="yes"/>
    <xsl:template match="OTA_TourInformationNotifRQ">
    <h1>
    <xsl:value-of select="//CompanyName"/>
    </h1>
    </xsl:template>
    </xsl:stylesheet>

    Comment


    • #3
      Danke für deine Antwort.

      Es hat sich leider nichts geändert, nach wie vor wird im Browser der gesamte Inhalt der XML-Datei in einem String angezeigt.

      Johannes.

      Comment


      • #4
        Mit welchem Browser arbeitest Du denn?
        Hast Du die Transformation mal mit einem Prozesser wie Saxon o.ä. ausprobiert?

        Comment


        • #5
          IE8 und FF 4.0. Mit einem Prozessor habe ich bisher noch keine Transformation gemacht.

          Beispiel mit deinem Code für die xsl-Datei siehe hier.

          Comment


          • #6
            Nun, im Gegensatz des von dir geposteten Beispieles hat das Dokument http://t3test.jochla.de/fileadmin/xml/ota-test2.xml folgendes:
            Code:
            OTA_TourInformationNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
            Das ist eine Namensraumdeklaration, die man in XSLT und XPath berücksichtigen muss:
            Code:
            <xsl:stylesheet
              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:ot="http://www.opentravel.org/OTA/2003/05"
              exclude-result-prefixes="ot"
              version="1.0">
            
              <xsl:output method="html"/>
            
              <xsl:template match="ot:CompanyName">
                <h1>
                   <xsl:value-of select="."/>
                </h1>
              </xsl:template>
            
            </xsl:stylesheet>

            Comment


            • #7
              na super! Danke!

              OK, das hatte ich nicht beachtet. Was aber bedeutet exclude-result-prefixes="ot" im Zusammenhang mit der match-Angabe "ot:CompanyName".

              Das Element "CompanyName" wird jetzt mit dem <h1>-Tag ausgezeichnet. Aber der Rest des xml-Dokuments wird wie bisher in einem String angezeigt.

              Was muss ich tun, wenn ich nur ein oder mehrere bestimmte Elemente anzeigen möchte, aber eben nicht alle Elemente?

              Danke für die Hilfe!

              Comment


              • #8
                Das exclude-result-prefixes sorgt nur dafür, das die dort gelisteten Präfixe (also "ot") nicht in der Ausgabe auftauchen (also nicht als
                Code:
                <h1 xmlns:ot="http://www.opentravel.org/OTA/2003/05">...</h1>
                ).
                Ansonsten suche dir ein XSLT-Tutorial. Um andere Elemente anzuzeigen, schreibt man weitere Templates, um nur bestimmte anzuzeigen, wählt man per apply-templates die aus, die verarbeitet werden sollen.
                Wenn man HTML erzeugen will, dann fängt man etwa mit
                Code:
                <xsl:template match="/">
                  <html>
                     <head>
                        <title>Beispiel</title>
                     </head>
                     <body>
                        <xsl:apply-templates/>
                     </body>
                  </html>
                </xsl:template>
                an, um erst mal die Struktur des HTML-Dokumentes aufzubauen, dann schreibt man weitere Templates für die Elemente, die man ausgeben will und passt eventuell apply-templates so an, dass andere Elemente nicht ausgeben werden.
                Unter Umständen hilft auch
                Code:
                <xsl:template match="text()"/>
                damit wird dann nicht mehr jeder Textknoten ausgegeben.

                Comment


                • #9
                  Hallo Martin,

                  danke für deine Hilfe, damit komme ich zunächst mal weiter. Hast du vllt. noch'n Tipp für ein gutes XSLT-Tutorial?

                  Johannes.

                  Comment

                  Working...
                  X