user293838
user293838

Reputation:

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?

Upvotes: 23

Views: 40033

Answers (6)

Gal Zilberman
Gal Zilberman

Reputation: 66

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

Upvotes: 1

Daniele Orlando
Daniele Orlando

Reputation: 2776

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

Upvotes: 2

Māris Kiseļovs
Māris Kiseļovs

Reputation: 17305

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

Upvotes: 47

Māris Kiseļovs
Māris Kiseļovs

Reputation: 17305

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>

Upvotes: 12

berkes
berkes

Reputation: 27603

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

Upvotes: 1

Gordon
Gordon

Reputation: 317197

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.

Upvotes: 4

Related Questions