Пример кода Perl для генерации XML из XSD с использованием XML :: Compile - PullRequest
0 голосов
/ 17 февраля 2011

Может кто-нибудь показать мне пример генерации XML из XSD с использованием XML :: Compile :: Schema .

Я пытаюсь опубликовать свой сценарий, который я пробую вместе с XSD, но я не могу этого сделать. поэтому я ищу любой пример.

Ответы [ 2 ]

3 голосов
/ 07 апреля 2014

Короче говоря, вам нужно сделать:

  1. Преобразование формата XSD в хеш-структуру Perl
  2. Построить этот хэш, заполнить данные
  3. Преобразование хэша в XML

Необходимые пакеты:

  • XML :: Компиляция :: Схема
  • XML :: Libxml :: Document

Следующий код создает структуру Perl из определения XSD.

use XML::Compile::Schema;
use Data::Dumper;

my $filename = $ARGV[0] || "";

if(!$filename){
warn "Please provide the WSDL definition file.";
exit 10;
}

my $schema = XML::Compile::Schema->new($filename);
my $hash;

print Dumper $schema->template('PERL' => 'Application');

Тогда структура данных Perl, созданная этой программой, выглядит так:

{
  MakeName =>
    {
     UniqueID => "anything",
     _ => "example", },

       MakeDetails =>
     {  
      Name =>
      {
       UniqueID => "anything",
       _ => "example", }, 
     },
   };

Таким образом, остальная часть вашей работы создаст ту же структуру в вашей программе, заполнив содержимое, например:

  my $hash = {
    MakeName => {
      UniqueID => 'xxxx',
      _ => 'Name of the Make',
    },

    OtherFields => foo_bar_get_other_hash(),
   };
 ....

 ## breathtaking moment, create the XML from this $hash 

 my $schema = XML::Compile::Schema->new("/opt/data/your.xsd");

 my $doc = XML::LibXML::Document->new();
 my $writer = $schema->compile(WRITER => 'Application');

 my $xml;

 ## Create $xml in the memory based on the Schema and your $hash
 eval{ $xml = $writer->($doc, $hash);};   

 if($@){
# Useful if the format is invalid against the Schema definition
    # Or if there are other errors may occurs
    $err_msg = $@->{message}->toString();
return ("", $err_msg);
 }

 ## If you want save this $xml to file, convert it to string format first
 $doc->setDocumentElement($xml);
 my $ori_content = $doc->toString(1);
 ## Now $ori_content holds the full XML content.
3 голосов
/ 27 декабря 2011

Я недавно написал учебник по этому вопросу: http://blogs.perl.org/users/brian_e_lozier/2011/10/using-xmlcompile-to-output-xsd-compliant-xml.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...