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();
?>
CLXXI. xmlwriter Functions
Wstęp
This is the xmlwriter extension. It currently only lists the proto definitions.
Wymagania
To be written. For example what external libraries are required
Typy zasobów
Type of resource types (link id, etc.) this extension returns.
To rozszerzenie nie posiada żadnych rodzajów zasobów.
- Spis treści
- xmlwriter_end_attribute -- End attribute - returns FALSE on error
- xmlwriter_end_cdata -- End current CDATA - returns FALSE on error
- xmlwriter_end_comment -- Create end comment - returns FALSE on error
- xmlwriter_end_document -- End current document - returns FALSE on error
- xmlwriter_end_dtd_attlist -- End current DTD AttList - returns FALSE on error
- xmlwriter_end_dtd_element -- End current DTD element - returns FALSE on error
- xmlwriter_end_dtd_entity -- End current DTD Entity - returns FALSE on error
- xmlwriter_end_dtd -- End current DTD - returns FALSE on error
- xmlwriter_end_element -- End current element - returns FALSE on error
- xmlwriter_end_pi -- End current PI - returns FALSE on error
- xmlwriter_flush -- Output current buffer
- xmlwriter_full_end_element -- End current element - returns FALSE on error
- xmlwriter_open_memory -- Create new xmlwriter using memory for string output
- xmlwriter_open_uri -- Create new xmlwriter using source uri for output
- xmlwriter_output_memory -- Output current buffer as string
- xmlwriter_set_indent_string -- Set string used for indenting - returns FALSE on error
- xmlwriter_set_indent -- Toggle indentation on/off - returns FALSE on error
- xmlwriter_start_attribute_ns -- Create start namespaced attribute - returns FALSE on error
- xmlwriter_start_attribute -- Create start attribute - returns FALSE on error
- xmlwriter_start_cdata -- Create start CDATA tag - returns FALSE on error
- xmlwriter_start_comment -- Create start comment - returns FALSE on error
- xmlwriter_start_document -- Create document tag - returns FALSE on error
- xmlwriter_start_dtd_attlist -- Create start DTD AttList - returns FALSE on error
- xmlwriter_start_dtd_element -- Create start DTD element - returns FALSE on error
- xmlwriter_start_dtd_entity -- Create start DTD Entity - returns FALSE on error
- xmlwriter_start_dtd -- Create start DTD tag - returns FALSE on error
- xmlwriter_start_element_ns -- Create start namespaced element tag - returns FALSE on error
- xmlwriter_start_element -- Create start element tag - returns FALSE on error
- xmlwriter_start_pi -- Create start PI tag - returns FALSE on error
- xmlwriter_text -- Write text - returns FALSE on error
- xmlwriter_write_attribute_ns -- Write full namespaced attribute - returns FALSE on error
- xmlwriter_write_attribute -- Write full attribute - returns FALSE on error
- xmlwriter_write_cdata -- Write full CDATA tag - returns FALSE on error
- xmlwriter_write_comment -- Write full comment tag - returns FALSE on error
- xmlwriter_write_dtd_attlist -- Write full DTD AttList tag - returns FALSE on error
- xmlwriter_write_dtd_element -- Write full DTD element tag - returns FALSE on error
- xmlwriter_write_dtd_entity -- Write full DTD Entity tag - returns FALSE on error
- xmlwriter_write_dtd -- Write full DTD tag - returns FALSE on error
- xmlwriter_write_element_ns -- Write full namesapced element tag - returns FALSE on error
- xmlwriter_write_element -- Write full element tag - returns FALSE on error
- xmlwriter_write_pi -- Write full PI tag - returns FALSE on error
- xmlwriter_write_raw -- Write text - returns FALSE on error
neftali dot yagua at gmail dot com
02-Jun-2011 06:43
darko at uvcms dot com
22-Feb-2010 07:30
setElement in the previous example does exactly the same thing as already existing writeElement.
massimo71
19-Feb-2009 02:24
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
25-Jul-2007 07:10
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
16-Apr-2006 05: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 10: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>
