2010-07-09 11 views
17

मुझे यह मूल कोड मिला है।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> 

इसका उपयोग फ़्यूज़नविड्ज से किया जाता है और PHP में इसे कैसे लिखना है इस पर कोई दस्तावेज नहीं है।

कोई भी सलाह दे सकता है?

उत्तर

33

वहाँ php.net/XMLWriter के साथ पूरा उदाहरण बिल्कुल वैसा ही एक्सएमएल उत्पादन का उत्पादन करने के लिए की तरह तुम्हें तैनात है।

<?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() 'इसके पैरामीटर को बूल के रूप में मानता है। यह पूरी लाइन को एक पंक्ति में लिखने के बजाय इंडेंटेशन (एक स्थान का उपयोग करके) को सक्षम बनाता है। Http://php.net/manual/de/function.xmlwriter-set-indent.php देखें। – flu

3

देखें व्यक्तिगत रूप से, मैं XML के साथ काम करने के लिए DOM पसंद करते हैं।

आप अपने प्रश्न को स्पष्ट करना चाहते हैं। अभी, यह कहना मुश्किल है कि आपकी समस्या क्या है।

1

SimpleXML, जो PHP में बनाया गया है, लेखन (और पार्सिंग) एक्सएमएल के लिए सबसे आसान समाधान है। http://php.net/manual/en/book.simplexml.php

+1

एक नोट करना चाहिए कि SimpleXML सरल किया जा रहा है इसका कारण कम से कम कार्यक्षमता है। अन्य libs अधिक शक्तिशाली हैं और एक्सएमएल पर अधिक नियंत्रण प्रदान करते हैं। – 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 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 के साथ आप इस प्रकार अपना एक्सएमएल जेनरेट कर सकते हैं।

$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.x – gaRex

+1

का समर्थन नहीं करता है अंतिम रिलीज में FluidXML ** PHP 5 ** का समर्थन करता है। –

+0

अच्छी नौकरी डैनियल! – gaRex

1

जैसा कि पहले उल्लेख किया है, setIndent पर खरोज सेट करता है और इस तरह इस्तेमाल किया जाना चाहिए:

$writer->setIndent(true); 

आप डिफ़ॉल्ट से किसी दूसरे पर खरोज आकार सेट करना चाहते हैं (2 रिक्त स्थान), आप setIndentString उपयोग कर सकते हैं:

$writer->setIndentString(" "); 
संबंधित मुद्दे