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开发者_如何学Go='$' 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?
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
- DevZone: XML and PHP
- PHP Manual: XML Manipulation
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(" ");
精彩评论