Announcement

Collapse
No announcement yet.

PHP5+XML+XSL

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

  • PHP5+XML+XSL

    Hallo,

    mit folgendem Code möchte ich aus einer xml-Datei eine xhtml-Datei erzeugen (gefunden auf php.net). Das klappt solange, bis ich in der collection.dtd das Entity <I>test<I> definiere, das mir zukünftig als Navigation dienen soll, und in der <I>test2.xml</I> benutze.
    Damit kann der xslt-Prozessor wohl nicht umgehen.

    <B>out.php</B>
    <PRE>
    &lt;?php
    /* Load the two XML sources */
    $xml = new DomDocument; // from /ext/dom
    $xml-&gt;load('test2.xml');

    $xsl = new DomDocument;
    $xsl-&gt;load('test2.xsl');

    /* Configure the transformer */
    $proc = new xsltprocessor;
    $proc-&gt;importStyleSheet($xsl); echo $proc-&gt;transformToXML($xml); ?&gt;
    </PRE>

    <B>test2.xml</B>
    <PRE>
    &lt;?xml version="1.0"?&gt;
    &lt;?xml-stylesheet type="text/xsl" href="test2.xsl"?&gt;
    &lt;!DOCTYPE collection SYSTEM "http://localhost/collection.dtd"&gt;

    &lt;collection&gt;
    &test;
    &lt;cd&gt;
    &lt;title&gt;PHP Rock&lt;/title&gt;
    &lt;artist&gt;Joe Coder&lt;/artist&gt;
    &lt;year&gt;2003&lt;/year&gt;
    &lt;/cd&gt;
    &lt;cd&gt;
    &lt;title&gt;Squashing Typos on a Winter's Eve&lt;/title&gt;
    &lt;artist&gt;kennyt&lt;/artist&gt;
    &lt;year&gt;2004&lt;/year&gt;
    &lt;/cd&gt;
    &lt;/collection&gt;
    </PRE>

    <B>navi.xml</B>
    <PRE>
    &lt;navi&gt;
    &lt;nav1&gt;
    1.punkt
    &lt;/nav1&gt;
    &lt;nav1&gt;
    2.punkt
    &lt;/nav1&gt;
    &lt;nav1&gt;
    2.punkt
    &lt;/nav1&gt;
    &lt;/navi&gt;
    </PRE>

    <B>test2.xsl</B>
    <PRE>
    &lt;?xml version="1.0"?&gt;
    &lt;xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;xslutput method="xml" encoding="iso-8859-1" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" /&gt;

    &lt;xsl:template match="collection"&gt;

    &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"&gt;
    &lt;head&gt;
    &lt;title&gt;Titelliste&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;h1&gt;Hey! Welcome to my sweet CD collection!&lt;/h1&gt;
    &lt;xsl:apply-templates/&gt;
    &lt;/body&gt;
    &lt;/html&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match="cd"&gt;
    &lt;h1&gt;&lt;xsl:value-of select="title"/&gt;&lt;/h1&gt;
    &lt;h2&gt;by &lt;xsl:value-of select="artist"/&gt;&lt;/h2&gt;
    &lt;h3&gt; - &lt;xsl:value-of select="year"/&gt;&lt;/h3&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match="navi"&gt;
    &lt;ul&gt;
    &lt;xsl:apply-templates/&gt;
    &lt;/ul&gt;
    &lt;/xsl:template&gt;

    &lt;xsl:template match="nav1"&gt;
    &lt;li&gt;
    &lt;xsl:value-of select="."/&gt;
    &lt;/li&gt;
    &lt;/xsl:template&gt;

    &lt;/xsl:stylesheet&gt;
    </PRE>

    <B>collection.dtd</B>
    <PRE>
    &lt;!ELEMENT collection ANY&gt;
    &lt;!ELEMENT cd ANY&gt;
    &lt;!ELEMENT title ANY&gt;
    &lt;!ELEMENT artist ANY&gt;
    &lt;!ELEMENT year ANY&gt;
    &lt;!ELEMENT navi ANY&gt;
    &lt;!ELEMENT nav1 ANY&gt;
    &lt;!ENTITY test SYSTEM "http://localhost/navi.xml"&gt;
    </PRE>

    Bei test2.xml und test2.xsl handelt es sich um Abwandlung von Beispiel-Code, der auf php.net gepostet wurde.

    Wäre großartig, wenn mir jemand weiterhelfen könnte.

    Grüße Andy

  • #2
    Nachtrag:

    Folgend die Fehlermeldung

    <PRE>
    Warning: DOMDocument::load() [function.load]: Entity 'test' not defined in file:///F%3A/xampp/htdocs/xmltest/test2.xml
    </PRE>

    Die Prozessoren verschiedener anderer Software (XMLWriter 2.4, ALTOVA XMLSpy, Internet Explorer 6) arbeiten ohne Fehler mit den Dateien

    Comment

    Working...
    X