Hi,
There already is a class xmlWriter, although it is not documented. This is a rewrite of the example from [http://cz2.php.net/manual/en/ref.xmlwriter.php#64484 Carlos Averett] and works well on my php 5.1.6
<?php
$xw = new xmlWriter();
$xw->openMemory();
$xw->startDocument('1.0','UTF-8');
$xw->startDtd('html','-//WAPFORUM//DTD XHTML Mobile 1.0//EN', 'http://www.wapforum.org/DTD/xhtml-mobile10.dtd');
$xw->endDtd();
$xw->startElement ('html'); // <html>
$xw->writeAttribute( 'xmlns', 'http://www.wapforum.org/DTD/xhtml-mobile10.dtd');
$xw->writeAttribute( 'xm:lang', 'en');
$xw->startElement('head'); // <head>
$xw->writeElement ('title', 'Test WAP Document');
$xw->endElement(); // </head>
$xw->startElement('body'); // <body>
$xw->startElement('ol'); // <ol>
$xw->writeElement ('li', 'One Item & <sss <ss />></ss>');
$xw->writeElement ('li', 'Another Item');
$xw->writeElement ('li', 'Another Item');
$xw->endElement(); // </ol>
$xw->endElement(); // </body>
$xw->endElement(); // </html>
$xw->endDtd();
print $xw->outputMemory(true);
?>
XMLWriter Funktionen
Inhaltsverzeichnis
- XMLWriter->endAttribute — Attribute beenden
- XMLWriter->endCData — Beendet CDATA-Block
- XMLWriter->endComment — Beendet Kommentar
- XMLWriter->endDocument — Beendet Dokument
- XMLWriter->endDTDAttlist — Beendet DTD-Attributliste
- XMLWriter->endDTDElement — Beendet DTD-Element
- XMLWriter->endDTDEntity — Beendet DTD-Entität
- XMLWriter->endDTD — Beendet DTD
- XMLWriter->endElement — Beendet Element
- XMLWriter->endPI — Beendet Verarbeitungsvorschrift
- XMLWriter->flush — Puffer schreiben
- XMLWriter->fullEndElement — Beendet Element
- XMLWriter::openMemory — Erzeugt einen neuen XMLWriter, der Stringausgaben in den Speicher schreibt
- XMLWriter->openURI — Erzeugt neuen XMLWriter, der URI für Ausgabe verwendet
- XMLWriter->outputMemory — Gibt Puffer zurück
- XMLWriter->setIndentString — Setzt Zeichenkette, die zur Einrückung verwendet wird
- XMLWriter->setIndent — Einrückung ein-/ausschalten
- XMLWriter->startAttributeNS — Namensraum-Attribut beginnen
- XMLWriter->startAttribute — Attribut beginnen
- XMLWriter->startCData — CDATA-Block beginnen
- XMLWriter->startComment — Kommentar beginnen
- XMLWriter->startDocument — Dokument beginnen
- XMLWriter->startDTDAttlist — DTD-Attributliste beginnen
- XMLWriter->startDTDElement — DTD-Element beginnen
- XMLWriter->startDTDEntity — DTD-Entität beginnen
- XMLWriter->startDTD — DTD beginnen
- XMLWriter->startElementNS — Element mit Namensraum beginnen
- XMLWriter->startElement — Element beginnen
- XMLWriter->startPI — Verarbeitungsvorschrift beginnen
- XMLWriter->text — Text schreiben
- XMLWriter->writeAttributeNS — Komplettes Attribute mit Namensraum schreiben
- XMLWriter->writeAttribute — Komplettes Attribut schreiben
- XMLWriter->writeCData — Kompletten CDATA-Block schreiben
- XMLWriter->writeComment — Kompletten Kommentar schreiben
- XMLWriter->writeDTDAttlist — Komplette DTD-Attributliste schreiben
- XMLWriter->writeDTDElement — Komplettes DTD-Element schreiben
- XMLWriter->writeDTDEntity — Komplette DTD-Entität schreiben
- XMLWriter->writeDTD — Komplettes DTD-Tag schreiben
- XMLWriter->writeElementNS — Komplettes Element mit Namensraum schreiben
- XMLWriter->writeElement — Komplettes Element schreiben
- XMLWriter->writePI — Komplette Verarbeitungsvorschrift-Tag schreiben
- XMLWriter->writeRaw — Reines XML schreiben
XMLWriter Funktionen
robajz [a] robajz [.] info
20-Nov-2006 10:23
20-Nov-2006 10:23
Alexandre Arica
16-Apr-2006 02:25
16-Apr-2006 02:25
How to generate a simple XML document for a XSL-Transformation purpose.
We have 3 files:
- 'index.php' : output a XML document
- 'XmlConstruct.class.php' : allow to construct a XML document with 'xmlwriter'
- 'index.xsl' : contains a XSLT document
Contents of the file 'index.php' :
<?php
$contents = array('page_title' => 'Generate a XHTML page from XML+XSLT files',
'welcome_msg' => 'Simple XHTML document from XML+XSLT files!');
require('XmlConstruct.class.php');
$XmlConstruct = new XmlConstruct('rootElement', 'index.xsl');
$XmlConstruct->fromArray($contents);
$XmlConstruct->output();
?>
Contents of the file 'XmlConstruct.class.php' :
<?php
/**
* Construct a simple XML document.
* This class inherits from the (PHP) class 'xmlwriter'.
* You will need at least PHP 5.1.2
*
* @author Alexandre Arica
* @since 16 April 2006
* @version 1.0 modified the 16 April 2006
*/
class XmlConstruct extends XMLWriter
{
/**
* Constructor.
* @param string $prm_rootElementName A root element's name of a current xml document
* @param string $prm_xsltFilePath Path of a XSLT file.
* @access public
* @param null
*/
public function __construct($prm_rootElementName, $prm_xsltFilePath=''){
$this->openMemory();
$this->setIndent(true);
$this->setIndentString(' ');
$this->startDocument('1.0', 'UTF-8');
if($prm_xsltFilePath){
$this->writePi('xml-stylesheet', 'type="text/xsl" href="'.$prm_xsltFilePath.'"');
}
$this->startElement($prm_rootElementName);
}
/**
* Set an element with a text to a current xml document.
* @access public
* @param string $prm_elementName An element's name
* @param string $prm_ElementText An element's text
* @return null
*/
public function setElement($prm_elementName, $prm_ElementText){
$this->startElement($prm_elementName);
$this->text($prm_ElementText);
$this->endElement();
}
/**
* Construct elements and texts from an array.
* The array should contain an attribute's name in index part
* and a attribute's text in value part.
* @access public
* @param array $prm_array Contains attributes and texts
* @return null
*/
public function fromArray($prm_array){
if(is_array($prm_array)){
foreach ($prm_array as $index => $text){
$this->setElement($index, $text);
}
}
}
/**
* Return the content of a current xml document.
* @access public
* @param null
* @return string Xml document
*/
public function getDocument(){
$this->endElement();
$this->endDocument();
return $this->outputMemory();
}
/**
* Output the content of a current xml document.
* @access public
* @param null
*/
public function output(){
header('Content-type: text/xml');
echo $this->getDocument();
}
}
?>
Contents of the file 'index.xsl' :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:output
method="html"
encoding="utf-8"
/>
<xsl:template match="rootElement">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><xsl:value-of select="page_title" /></title>
</head>
<body>
<xsl:value-of select="welcome_msg" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Carlos Averett
15-Apr-2006 07:49
15-Apr-2006 07:49
Using XMLWriter to create a WAP page:
<?php
$memory = xmlwriter_open_memory();
xmlwriter_start_document($memory,'1.0','UTF-8');
xmlwriter_start_dtd($memory,'html','-//WAPFORUM//DTD XHTML Mobile 1.0//EN', 'http://www.wapforum.org/DTD/xhtml-mobile10.dtd');
xmlwriter_end_dtd($memory);
xmlwriter_start_element ($memory,'html'); // <html>
xmlwriter_write_attribute( $memory, 'xmlns', 'http://www.wapforum.org/DTD/xhtml-mobile10.dtd');
xmlwriter_write_attribute( $memory, 'xm:lang', 'en');
xmlwriter_start_element($memory,'head'); // <head>
xmlwriter_write_element ($memory,'title', 'Test WAP Document');
xmlwriter_end_element($memory); // </head>
xmlwriter_start_element($memory,'body'); // <body>
xmlwriter_start_element($memory,'ol'); // <ol>
xmlwriter_write_element ($memory,'li', 'One Item');
xmlwriter_write_element ($memory,'li', 'Another Item');
xmlwriter_write_element ($memory,'li', 'Another Item');
xmlwriter_end_element($memory); // </ol>
xmlwriter_end_element($memory); // </body>
xmlwriter_end_element($memory); // </html>
xmlwriter_end_dtd($memory);
$xml = xmlwriter_output_memory($memory,true);
?>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.wapforum.org/DTD/xhtml-mobile10.dtd" xm:lang="en">
<head>
<title>Test WAP Document</title>
</head>
<body>
<ol>
<li>One Item</li>
<li>Another Item</li>
<li>Another Item</li>
</ol>
</body>
</html>