文字

XMLWriter 函数

Table of Contents

  • XMLWriter::endAttribute — End attribute
  • XMLWriter::endCData — End current CDATA
  • XMLWriter::endComment — Create end comment
  • XMLWriter::endDocument — End current document
  • XMLWriter::endDTDAttlist — End current DTD AttList
  • XMLWriter::endDTDElement — End current DTD element
  • XMLWriter::endDTDEntity — End current DTD Entity
  • XMLWriter::endDTD — End current DTD
  • XMLWriter::endElement — End current element
  • XMLWriter::endPI — End current PI
  • XMLWriter::flush — Flush current buffer
  • XMLWriter::fullEndElement — End current element
  • XMLWriter::openMemory — Create new xmlwriter using memory for string output
  • XMLWriter::openURI — Create new xmlwriter using source uri for output
  • XMLWriter::outputMemory — Returns current buffer
  • XMLWriter::setIndentString — Set string used for indenting
  • XMLWriter::setIndent — Toggle indentation on/off
  • XMLWriter::startAttributeNS — Create start namespaced attribute
  • XMLWriter::startAttribute — Create start attribute
  • XMLWriter::startCData — Create start CDATA tag
  • XMLWriter::startComment — Create start comment
  • XMLWriter::startDocument — Create document tag
  • XMLWriter::startDTDAttlist — Create start DTD AttList
  • XMLWriter::startDTDElement — Create start DTD element
  • XMLWriter::startDTDEntity — Create start DTD Entity
  • XMLWriter::startDTD — Create start DTD tag
  • XMLWriter::startElementNS — Create start namespaced element tag
  • XMLWriter::startElement — Create start element tag
  • XMLWriter::startPI — Create start PI tag
  • XMLWriter::text — Write text
  • XMLWriter::writeAttributeNS — Write full namespaced attribute
  • XMLWriter::writeAttribute — Write full attribute
  • XMLWriter::writeCData — Write full CDATA tag
  • XMLWriter::writeComment — Write full comment tag
  • XMLWriter::writeDTDAttlist — Write full DTD AttList tag
  • XMLWriter::writeDTDElement — Write full DTD element tag
  • XMLWriter::writeDTDEntity — Write full DTD Entity tag
  • XMLWriter::writeDTD — Write full DTD tag
  • XMLWriter::writeElementNS — Write full namespaced element tag
  • XMLWriter::writeElement — Write full element tag
  • XMLWriter::writePI — Writes a PI
  • XMLWriter::writeRaw — Write a raw XML text

用户评论:

[#1] benstendahl [2014-11-04 17:09:09]

XML allows for repeated nodes that an array does not support in its associative index.  To account for this we can use numerically indexed arrays.

$array = array(
    'element' => array(
        array('node' => 'some value'), 
        array('node' => 'some other value')
    ), 
    'key' => 'value'
);

This requires that we change the fromArray() method in the class below to check for numeric indexes and throw them away.

public function fromArray(array $array)
 {
    foreach ($array as $key=>$val) {
        if (is_array($val)) {
            if (is_numeric($key)) {
                // numeric keys aren't allowed so we'll skip the key
                $this->fromArray($val);
            } else {
                $this->startElement($key);
                $this->fromArray($val);
                $this->endElement();
            }
        } else {
            $this->writeElement($key, $val);
        }
    }
}

[#2] neftali dot yagua at gmail dot com [2011-06-02 18:43:02]

Inspired in the XmlConstruct.

<?php
class XLIFFConstruct extends XMLWriter
{

    

      
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();

?>

[#3] darko at uvcms dot com [2010-02-22 07:30:19]

setElement in the previous example does exactly the same thing as already existing writeElement.

[#4] massimo71 [2009-02-19 02:24:59]

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
{

    

    
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);
    }

    

    
public function setElement($prm_elementName$prm_ElementText){
        
$this->startElement($prm_elementName);
        
$this->text($prm_ElementText);
        
$this->endElement();
    }

    

    
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);
          
        }
      }
    }

    

    
public function getDocument(){
        
$this->endElement();
        
$this->endDocument();
        return 
$this->outputMemory();
    }

    

    
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();
?>

[#5] Yves Sucaet [2007-07-25 07:10:07]

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"); ?>

[#6] Alexandre Arica [2006-04-16 05:25:43]

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


class XmlConstruct extends XMLWriter
{

    

    
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);
    }

    
 
    
public function setElement($prm_elementName$prm_ElementText){
        
$this->startElement($prm_elementName);
        
$this->text($prm_ElementText);
        
$this->endElement();
    }

    
 
    
public function fromArray($prm_array){
        if(
is_array($prm_array)){
            foreach (
$prm_array as $index => $text){
                
$this->setElement($index$text);
            }
        }
    }

    
 
    
public function getDocument(){
        
$this->endElement();
        
$this->endDocument();
        return 
$this->outputMemory();
    }

    
 
    
public function output(){
        
header('Content-type: text/xml');
        echo 
$this->getDocument();
    }
    

}

?>


Contents of the file 'index.xsl' :

<?phpxml 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>

[#7] Carlos Averett [2006-04-15 10:49:42]

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:
<?phpxml 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>

上一篇: 下一篇: