Mit XSLT auf HTML zugreifen

AleSan

Grünschnabel
Hallo zusammen,

hab folgendes Problem:
Habe eine bestehende ziemlich umfangreiche HTML-Seite und möchte diese nach bestimmten Kriterien (wie z.B. nach bestimmten CSS-Klassen, Ids, Tags etc.) umbauen/transformieren.

Zum Transformieren gibt es ja XSLT, allerdings hab ich bisher nur Einträge gefunden wo man mit XSLT auf XML-Dateien zugreifen kann und daraus ein HTML erzeugen kann.

Weiß jemand ob man auch mit XSLT direkt auf eine HTML-Seite zugreifen kann oder muss ich aus meiner bestehenden HTML per php die Teile die ich brauche erst in eine XML schreiben und dann die Transformation via XSLT vornehmen?

Oder ist XSLT sowie das falsche dafür?

Vielen Dank schon mal im Voraus für Eure Hilfe!
 
Hallo,

habs jetzt so hinbekommen:
$html = new DOMDocument;
$html->loadHTMLFile('../test2.html');
$html->saveXML($html->documentElement);
$xsl = new DOMDocument;
$proc = new XSLTProcessor;
$xsl->load('tes.xsl');
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($html);

Da meine Seite eine wohlgeformte XHTML ist geht das wohl.

Jetzt hab ich noch ne andere Frage...wenn ich per php $proc->setParameter('', $testarr); ein Array an die XSL-Datei übergebe...wie kann ich dieses dynamisch auslesen und mit den Parametern in der XSL weiterarbeiten? Kann man nur assoziative Arrays benutzen oder auch mehrdimensionale?

Vielen Dank schon mal...
 
Hallo!
... Da meine Seite eine wohlgeformte XHTML ist geht das wohl.
Das funktioniert auch mit "alten HTML-Krücken". Ein Beispiel:
PHP:
<?php
$xslDoc = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" doctype-system="about:legacy-compat" encoding="UTF-8" omit-xml-declaration="yes" indent="yes" />
  <xsl:strip-space elements="*" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="body/text()">
    <p>
      <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
      </xsl:copy>
    </p>
  </xsl:template>
  <xsl:template match="h1|a|p|comment()" />
</xsl:stylesheet>
EOT;

$domDoc = new DomDocument();
@$domDoc->loadHTMLFile('http://www.uni-leipzig.de/cgi-bin/date/index.htm');

$xslObj = new DomDocument();
$xslObj->loadXML($xslDoc);

$xsltRes = new XSLTProcessor;
$xsltRes->importStylesheet($xslObj);
$xslOutput = $xsltRes->transformToXML($domDoc);

header('Content-type: text/html');
print $xslOutput;
?>
Jetzt hab ich noch ne andere Frage...wenn ich per php $proc->setParameter('', $testarr); ein Array an die XSL-Datei übergebe...wie kann ich dieses dynamisch auslesen und mit den Parametern in der XSL weiterarbeiten? Kann man nur assoziative Arrays benutzen oder auch mehrdimensionale?
Ich würde statt eines Arrays gleich ein XML-Dokument erzeugen oder aber das Array in XML konvertieren. Dann kannst du in XSL mit der document()-Funktion darauf zugreifen.
 
Jetzt hab ich noch ne andere Frage...wenn ich per php $proc->setParameter('', $testarr); ein Array an die XSL-Datei übergebe...wie kann ich dieses dynamisch auslesen und mit den Parametern in der XSL weiterarbeiten?

Garnicht: im XSL ist dies nicht als Array vorhanden(arrays gibt es in xsl nicht), das ist nur eine Kurzschreibweise.

Code:
$proc->setParameter('', array('a'=>'aa','b'=>'bb'));

ist identisch mit:
Code:
$proc->setParameter('', 'a','aa'); 
$proc->setParameter('', 'b','bb');
 

Neue Beiträge

Zurück