2010-07-09 3 views
17

이 기본 코드가 있습니다.PHP를 사용하여 XML을 작성해야합니까?

<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 
$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()'는 매개 변수를 bool로 취급합니다. 하나의 줄에 전체 XML을 쓰는 대신 들여 쓰기 (한 공간 사용) 만 가능합니다. http://php.net/manual/de/function.xmlwriter-set-indent.php를 참조하십시오. – flu

1

PHP에 내장 된 SimpleXML은 XML 작성 및 구문 분석을위한 가장 간단한 솔루션입니다. http://php.net/manual/en/book.simplexml.php

+1

SimpleXml은 그것은 최소한의 기능을 가지고 있기 때문입니다. 다른 libs는 더 강력하고 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 출력을 생성하는 php.net/XMLWriter와 완벽한 예입니다

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

PHP 5.0.x를 지원하지 않음을 알려주는 – gaRex

+1

지난 릴리스의 FluidXML은 ** PHP 5 **를 지원합니다. –

+0

좋은 직장 Danielle! – gaRex

1

는 setIndent는에 들여 쓰기를 설정하고 다음과 같이 사용한다 :

$writer->setIndent(true); 

기본 이외의 다른 하나에 들여 쓰기 크기를 설정하려면

(2 공백)을 사용하면 setIndentString을 사용할 수 있습니다.

$writer->setIndentString(" "); 
관련 문제