2008-09-30 2 views
24

मुझे पर्ल में एक्सएमएल बनाने की जरूरत है। जो मैंने पढ़ा है, उससे XML::LibXML पार्सिंग और एक्सएमएल का उपयोग करने के लिए बहुत अच्छा है जो कहीं और से आता है। क्या किसी के पास XML लेखक के लिए कोई सुझाव है? XML::Writer अभी भी बनाए रखा है? क्या कोई इसे पसंद/उपयोग करता है?मैं पर्ल से एक्सएमएल कैसे बना सकता हूं?

सुविधा-पूर्णता के अलावा, मैं एक आसान से उपयोग वाक्य रचना दिलचस्पी है, तो वाक्य रचना और कारण है कि आप अपने जवाब में कि मॉड्यूल की तरह किसी भी अन्य कारणों का वर्णन करें।

कृपया प्रति जवाब एक सुझाव के साथ जवाब दें, और यदि किसी ने पहले ही आपके पसंदीदा के साथ उत्तर दिया है, तो कृपया उस उत्तर को वोट दें। उम्मीद है कि यह देखना आसान होगा कि सबसे लोकप्रिय क्या है।

धन्यवाद!

उत्तर

20

एक्सएमएल :: लेखक अभी भी बनाए रखा है (कम से कम, इस साल फरवरी के रूप में), और यह वास्तव में पसंदीदा पर्ल एक्सएमएल लेखकों में से एक वहाँ बाहर है।

वाक्य रचना वर्णन करने के लिए के रूप में, एक (लिंक सवाल में पहले से ही है) मॉड्यूल के दस्तावेज़ को देखने के लिए बेहतर है। बुद्धि के लिए:

use XML::Writer; 

    my $writer = new XML::Writer(); # will write to stdout 
    $writer->startTag("greeting", 
        "class" => "simple"); 
    $writer->characters("Hello, world!"); 
    $writer->endTag("greeting"); 
    $writer->end(); 
    $output->close(); 

    # produces <greeting class='simple'>Hello world!</greeting> 
+0

धन्यवाद, मैं एक्सएमएल :: लेखक के लिए दस्तावेज़ को देखने की थी। मैं कुछ हद तक क्लीनर सिंटैक्स की उम्मीद कर रहा था, इसलिए मैं यह देखने के लिए थोड़ा इंतजार करूंगा कि कोई और सुझाव किसी भी सुझाव के साथ झुकता है, लेकिन अगर यह पसंदीदा लगता है, तो मैं इसके साथ जाऊंगा। – pkaeding

+2

सिंथैक्स "शायद" दांत में लंबा लेकिन एक्सएमएल :: राइटर ने मुझे 8 से अधिक वर्षों से अच्छी तरह से सेवा दी। पर्ल से एक्सएमएल बनाने की आवश्यकता होने पर मैं पहली बार पहुंचता हूं। कुछ और "कामुक" के लिए एक्सएमएल :: कक्षा देखें (हालांकि ध्यान दें कि यह 2005 से अपडेट नहीं किया गया है)। – draegtun

+3

पुन। "क्लीनर सिंटैक्स", ऊपर दिए गए उदाहरण में "ग्रीटिंग" टैग लिखा जा सकता था: $ लेखक-> डेटा एलिमेंट ("ग्रीटिंग", "हैलो, वर्ल्ड!", "क्लास" => "सरल")। मैं नहीं देखता कि यह कितना आसान हो सकता है। –

7

मैं बहुत एक्सएमएल ऐसा नहीं करते हैं, लेकिन XML::Smart लगता है कि यह है कि तुम क्या चाहते हो सकता है। दस्तावेज़ में Creating XML Data अनुभाग पर नज़र डालें और यह बहुत आसान और उपयोग करने में आसान लग रहा है।

use XML::Smart; 

## Create a null XML object: 
my $XML = XML::Smart->new() ; 

## Add a server to the list: 
$XML->{server} = { 
    os => 'Linux' , 
    type => 'mandrake' , 
    version => 8.9 , 
    address => [ '192.168.3.201', '192.168.3.202' ] , 
} ; 

$XML->save('newfile.xml') ; 

कौन सा newfile.xml में रखते हैं:

<server os="Linux" type="mandrake" version="8.9"> 
    <address>192.168.3.201</address> 
    <address>192.168.3.202</address> 
</server> 

कूल

डॉक Paraphrasing। मुझे इसके साथ खेलना होगा :)

3

एक्सएमएल :: स्मार्ट अच्छा लग रहा है, लेकिन मुझे यह याद नहीं है कि जब मैं XML::Simple का उपयोग कर रहा था तो कई साल पहले। अच्छा इंटरफेस, और एक्सएमएल पढ़ने और लिखने के लिए अच्छी तरह से काम करता है।

8

आप पर्ल में डेटा संरचना लेने के लिए और यह XML में बदलने के लिए चाहते हैं, XML::Simple अच्छी तरह से काम करेगा।

इसके सरलतम पर

:

 
my $hashref = { foo => 'bar', baz => [ 1, 2, 3 ] }; 
use XML::Simple; 
my $xml = XML::Simple::XMLout($hashref); 

कि इसके नाम से पता चलता है, इसका मूल उपयोग सरल है; हालांकि यदि आपको उनकी ज़रूरत है तो यह बहुत सारी सुविधाएं प्रदान करता है।

स्वाभाविक रूप से, यह आसानी से एक्सएमएल को भी पार्स कर सकता है।

1

मैं XML::TreeBuilder चाहते क्योंकि यह तरीका मुझे लगता है कि फिट बैठता है। ऐतिहासिक रूप से, मैंने इसे उत्सर्जित करने से पार्सिंग के लिए और अधिक उपयोग किया है।

इस प्रश्न के पोस्ट के कुछ सप्ताह बाद, मुझे पर्ल से कुछ एक्सएमएल उत्पन्न करने का अवसर मिला। मैंने यहां सूचीबद्ध अन्य मॉड्यूल का सर्वेक्षण किया, मान लीजिए कि उनमें से एक एक्सएमएल :: ट्रीबिल्डर से बेहतर काम करेगा, लेकिन ट्रीबिल्डर अभी भी जो चाहता था उसके लिए सबसे अच्छा विकल्प था।

एक दोष यह है वहाँ एक XML :: TreeBuilder वस्तु में प्रोसेसिंग निर्देश और घोषणाओं का प्रतिनिधित्व करने के लिए कोई रास्ता नहीं है था।

+0

मैं आपके साथ ब्रायन से सहमत हूं। मेरे मामले में, मैंने XML :: LibXML को लिखने के लिए भी प्रयास करने का निर्णय लिया क्योंकि मैं जिस कोड को बदल रहा था उसका टुकड़ा पहले से ही अन्य कार्यों के लिए XML :: LibXML का उपयोग कर रहा था। – cosimo

+2

ब्रायन का सिर्फ संपादक जिसने लिंक जोड़ा; मैं वह हूं जिसने टिप्पणी की। :) – skiphoppy

27

बस रिकॉर्ड के लिए, यहां एक स्निपेट है जो XML :: LibXML का उपयोग करता है।

#!/usr/bin/env perl 

# 
# Create a simple XML document 
# 

use strict; 
use warnings; 
use XML::LibXML; 

my $doc = XML::LibXML::Document->new('1.0', 'utf-8'); 

my $root = $doc->createElement("my-root-element"); 
$root->setAttribute('some-attr'=> 'some-value'); 

my %tags = (
    color => 'blue', 
    metal => 'steel', 
); 

for my $name (keys %tags) { 
    my $tag = $doc->createElement($name); 
    my $value = $tags{$name}; 
    $tag->appendTextNode($value); 
    $root->appendChild($tag); 
} 

$doc->setDocumentElement($root); 
print $doc->toString(); 

और इस आउटपुट:

<?xml version="1.0" encoding="utf-8"?> 
<my-root-element some-attr="some-value"> 
    <color>blue</color> 
    <metal>steel</metal> 
</my-root-element>