setElement in the previous example does exactly the same thing as already existing writeElement.
Funciones de XMLWriter
Tabla de contenidos
- XMLWriter::endAttribute — Fin del atributo
- XMLWriter::endCData — Fin del actual CDATA
- XMLWriter::endComment — Crea un comentario final
- XMLWriter::endDocument — Finaliza el actual documento
- XMLWriter::endDTDAttlist — Finaliza la actual attList DTD
- XMLWriter::endDTDElement — Finaliza el actual elemento DTD
- XMLWriter::endDTDEntity — Finaliza el actual ente DTD
- XMLWriter::endDTD — Finaliza la actual DTD
- XMLWriter::endElement — Finaliza el actual elemento
- XMLWriter::endPI — Finaliza el actual IP
- XMLWriter::flush — Vacía el búfer actual
- XMLWriter::fullEndElement — Fin del elemento actual
- XMLWriter::openMemory — Crea un nuevo xmlwriter usando memoria para el string de salida
- XMLWriter::openURI — Crea un nuevo xmlwriter usando una fuente uri para la salida
- XMLWriter::outputMemory — Devuelve el actual buffer
- XMLWriter::setIndentString — Establece una cadena usada para la identidad
- XMLWriter::setIndent — Cambia la sangria de encendida/apagada
- XMLWriter::startAttributeNS — Crea el atributo de inicio del namespaced
- XMLWriter::startAttribute — Crea un atributo inicial
- XMLWriter::startCData — Crea la etiqueta de inicio de CDATA
- XMLWriter::startComment — Crea un comentario inicial
- XMLWriter::startDocument — Crea un etiqueta del documento
- XMLWriter::startDTDAttlist — Crea el DTD AttList inicial
- XMLWriter::startDTDElement — Crea un elemento DTD inicial
- XMLWriter::startDTDEntity — Crea un ente DTD inicial
- XMLWriter::startDTD — Crea la etiqueta DTD inicial
- XMLWriter::startElementNS — Crea la etiqueta del elemento de espacio de nombres inicial
- XMLWriter::startElement — Crea la etiqueta del elemento inicial
- XMLWriter::startPI — Crea la etiqueta PI inicial
- XMLWriter::text — Escribe el texto
- XMLWriter::writeAttributeNS — Escribe un atributo full de namespaced
- XMLWriter::writeAttribute — Escribe un atributo completo
- XMLWriter::writeCData — Escribe una etiqueta completa del CDATA
- XMLWriter::writeComment — EScribe la etiqueta del comentario completa
- XMLWriter::writeDTDAttlist — Escribe la etiqueta completa del DTD AttList
- XMLWriter::writeDTDElement — Escribe la etiqueta completa de un elemento DTD
- XMLWriter::writeDTDEntity — Escribe una etiqueta completa de un ente DTD
- XMLWriter::writeDTD — Escribe una etiqueta completa del DTD
- XMLWriter::writeElementNS — Escribe una etiqueta completa del elemento
- XMLWriter::writeElement — Escribe una etiqueta completa del elemento
- XMLWriter::writePI — Escribe un IP
- XMLWriter::writeRaw — Escribe un texto sin formato del XML
darko at uvcms dot com ¶
3 years ago
neftali dot yagua at gmail dot com ¶
2 years ago
Inspired in the XmlConstruct.
<?php
class XLIFFConstruct 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
*/
var $_phrase_id=1;
public function __construct(){
$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('xliff');
$this->writeAttribute('version', '1.0');
$this->startElement('file');
$this->writeAttribute('original', 'global');
$this->writeAttribute('source-language', 'es');
$this->writeAttribute('datatype', 'plaintext');
$this->writeAttribute('date', date('c'));
$this->startElement('body');
}
public function addPhrase($source, $target){
$this->startElement('trans-unit');
$this->writeAttribute('id', $this->_phrase_id++);
$this->startElement('source');
$this->text($source);
$this->endElement();
$this->startElement('target');
$this->text($target);
$this->endElement();
$this->endElement();
}
public function getDocument(){
$this->endElement();
$this->endElement();
$this->endElement();
$this->endDocument();
return $this->outputMemory();
}
public function output(){
header('Content-type: text/xml');
echo $this->getDocument();
}
}
?>
Example:
<?php
$xliff = new XLIFFConstruct();
$xliff->addPhrase('source','target');
$xliff->addPhrase('add','añadir');
$xliff->addPhrase('open','abrir');
$xliff->addPhrase('change','cambiar');
$xliff->addPhrase('new','nuevo');
$xliff->addPhrase('save','guardar');
echo $xliff->getDocument();
?>
massimo71 ¶
4 years ago
I had a feature to the XmlConstruct class by Alexandre Aprica. Now you can use nested array to generate nested xml elements.
<?php
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 => $element){
if(is_array($element)){
$this->startElement($index);
$this->fromArray($element);
$this->endElement();
}
else
$this->setElement($index, $element);
}
}
}
/**
* 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();
}
}
Example:
$contents = array(
'page_title' => 'Generate a XHTML page from XML+XSLT files',
'welcome_msg' => 'Simple XHTML document from XML+XSLT files!',
'prova' => array(
"gino" => array(
"innergino" => "gino inner value"
),
"filo" => "filodata"
),
);
$XmlConstruct = new XmlConstruct('root');
$XmlConstruct->fromArray($contents);
$XmlConstruct->output();
?>
Yves Sucaet ¶
5 years ago
If you want your XML-output to be seen as XML by the browser, you need to modify your header. The XmlWriter does not do this for you! Therefore, the first line of your script should be:
<?php header("Content-type: text/xml"); ?>
Alexandre Arica ¶
7 years ago
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 ¶
7 years ago
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>
