Need to write XML using PHP - how?

I've got this basic code.

<chart lowerLimit='0' upperLimit='100' caption='Revenue' subcaption='US $ (1,000s)' numberPrefix='$' numberSuffix='K' showValue='1' >
   <colorRange>
      <color minValue='0' maxValue='50' color='A6A6A6'/>
      <color minValue='50' maxValue='75' color='CCCCCC'/> 
      <color minValue='75' maxValue='100' color='E1E1E1'/> 
   </colorRange> 
   <value>78.9</value>
   <target>80</target>
</chart>

it's used from fusionwidgets and there's no documentation on how to write this in PHP.

can anybody advise?

Answers


There is complete example with php.net/XMLWriter to produce exactly the same XML output like you posted.

<?php
$writer = new XMLWriter();  
$writer->openURI('php://output');  
$writer->startDocument('1.0','UTF-8');  
$writer->setIndent(4);   
$writer->startElement('chart');  
   $writer->writeAttribute('lowerLimit', '0');  
   $writer->writeAttribute('upperLimit', '100');  
   $writer->writeAttribute('caption', 'Revenue');  
   $writer->writeAttribute('subcaption', 'US $ (1,000s)');  
   $writer->writeAttribute('numberPrefix', '$');  
   $writer->writeAttribute('numberSuffix', 'K');  
   $writer->writeAttribute('showValue', '1');  
   $writer->startElement('colorRange');  
      $writer->startElement('color');  
         $writer->writeAttribute('minValue', '0');  
         $writer->writeAttribute('maxValue', '50'); 
         $writer->writeAttribute('color', 'A6A6A6'); 
      $writer->endElement();    
      $writer->startElement('color');  
         $writer->writeAttribute('minValue', '50');  
         $writer->writeAttribute('maxValue', '75'); 
         $writer->writeAttribute('color', 'CCCCCC'); 
      $writer->endElement();  
      $writer->startElement('color');  
         $writer->writeAttribute('minValue', '75');  
         $writer->writeAttribute('maxValue', '100'); 
         $writer->writeAttribute('color', 'E1E1E1'); 
      $writer->endElement();  
   $writer->endElement();  
   $writer->writeElement('value','78.9');  
   $writer->writeElement('target','78.9');  
$writer->endElement();  
$writer->endDocument();   
$writer->flush();
?>

My favorite way to write XML files is XMLWriter - http://php.net/xmlwriter . It's very powerfull and simple to use.

<?php
           $writer = new XMLWriter();  
           $writer->openURI('php://output');   
           $writer->startDocument('1.0','UTF-8');   
           $writer->setIndent(4);   
           $writer->startElement('items');  
           $writer->startElement("main");  
           $writer->writeElement('user_id', 3);  
           $writer->writeElement('msg_count', 11);  
           $writer->endElement();   
           $writer->startElement("msg");  
           $writer->writeAttribute('category', 'test');  
           $writer->endElement();     
           $writer->endElement();   
           $writer->endDocument();   
           $writer->flush(); 
    ?>

And that piece of code will produce the following XML:

<?xml version="1.0" encoding="UTF-8"?>
<items>
 <main>
  <user_id>3</user_id>
  <msg_count>11</msg_count>
 </main>
 <msg category="test"/>
</items>

See

Personally, I prefer DOM for working with XML.

You might want to clearify your question. Right now, it's hard to tell what your problem is.


With FluidXML you can generate your XML in this way.

$chart = fluidxml('chart');

$chart->attr('lowerLimit', 0)
      ->attr('upperLimit', 100)
      ->attr(...)
      ->add('colorRange')
      ->add('value', 78.9)
      ->add('target', 80)
      ->query('//colorRange')
          ->add('color', ['minValue' => 0, 'maxValue' => 50, ...])
          ->add('color', ['minValue' => 50, 'maxValue' => 75, ...])
          ->add('color', ['minValue' => 75, 'maxValue' => 100, ...]);

https://github.com/servo-php/fluidxml


SimpleXML, wich is built into PHP is the most simple solution for writing (and parsing) XML. http://php.net/manual/en/book.simplexml.php


As mentioned before, setIndent sets indentation on and should be used like this:

$writer->setIndent(true);

if you want to set the indentation size to a different one than the default (2 spaces), you can use setIndentString:

$writer->setIndentString("    ");

Need Your Help

How to hide audio file inside image

c# image byte steganography

I'm working on a stenography program where i need to hide audio file inside image.