2010-07-09 3 views
17

У меня есть этот базовый код.Нужно писать XML с помощью PHP - как?

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

его используют от fusionwidgets, и нет документации о том, как писать это на PHP.

может кто-нибудь посоветовать?

ответ

33

Существует полный пример с php.net/XMLWriter производить точно такой же вывод XML, как вы писали.

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

КПП. '\ XmlWriter :: setIndent()' обрабатывает свой параметр как bool. Он просто позволяет отступы (используя одно пространство) вместо написания всего XML в одной строке. См. Http://php.net/manual/de/function.xmlwriter-set-indent.php. – flu

1

SimpleXML, встроенный в PHP, является самым простым решением для написания (и анализа) XML. http://php.net/manual/en/book.simplexml.php

+1

Следует отметить, что SimpleXml прост потому что он имеет наименьшую функциональность. Другие библиотеки более мощные и предлагают больше контроля над XML. – Gordon

8

Моим любимым способом записи XML-файлов является XMLWriter - http://php.net/xmlwriter. Это очень мощный и простой в использовании.

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

И этот кусок кода будет производить следующий 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> 
1

С помощью FluidXML вы можете сгенерировать свой XML таким образом.

$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

+0

Pls сообщается, что он не поддерживает PHP 5.x – gaRex

+1

FluidXML в последней версии поддерживает ** PHP 5 **. –

+0

Хорошая работа Daniele! – gaRex

1

Как упоминалось ранее, setIndent устанавливает отступ, и должны быть использованы, как это:

$writer->setIndent(true); 

, если вы хотите, чтобы установить размер отступа к другой, чем по умолчанию (2 пробела), вы можете использовать setIndentString:

$writer->setIndentString(" "); 
Смежные вопросы