2010-07-09 5 views
17

J'ai ce code de base.Besoin d'écrire XML en utilisant PHP - comment?

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

est utilisé à partir de fusionwidgets et il n'y a aucune documentation sur la façon d'écrire cela en PHP.

quelqu'un peut-il conseiller?

Répondre

33

Il est par exemple avec php.net/XMLWriter pour produire exactement la même sortie XML comme vous avez publié.

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

Btw. '\ XmlWriter :: setIndent()' traite son paramètre comme un booléen. Il permet simplement l'indentation (en utilisant un espace) au lieu d'écrire tout le XML sur une ligne. Voir http://php.net/manual/de/function.xmlwriter-set-indent.php. – flu

1

SimpleXML, qui est construit en PHP est la solution la plus simple pour écrire (et analyser) du XML. http://php.net/manual/en/book.simplexml.php

+1

On devrait noter que SimpleXml est simple parce qu'il a le moins de fonctionnalités. Les autres bibliothèques sont plus puissantes et offrent plus de contrôle sur le XML. – Gordon

8

Ma méthode favorite pour écrire des fichiers XML est XMLWriter - http://php.net/xmlwriter. C'est très puissant et simple à utiliser.

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

Et ce morceau de code produira le code XML suivant:

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

Avec FluidXML, vous pouvez générer votre XML de cette manière.

$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

Veuillez noter qu'il ne supporte pas PHP 5.x – gaRex

+1

FluidXML dans la dernière version supporte ** PHP 5 **. –

+0

Bon travail Daniele! – gaRex

1

Comme mentionné précédemment, setIndent fixe indentation et doit être utilisé comme ceci:

$writer->setIndent(true); 

si vous voulez définir la taille d'indentation à une autre que la valeur par défaut (2 espaces), vous pouvez utiliser setIndentString:

$writer->setIndentString(" ");