perl将xsd转换为xml
我花了几个小时来研究这个问题,即使有saberworks在另一个类似问题中发布的教程,我也无法让它发挥作用 因此,我试图将perl将xsd转换为xml,xml,perl,xsd,libxml2,Xml,Perl,Xsd,Libxml2,我花了几个小时来研究这个问题,即使有saberworks在另一个类似问题中发布的教程,我也无法让它发挥作用 因此,我试图将.xsd文件转换为xml结构,之后可以通过libXML或任何其他xml解析器访问并完成 如果您阅读链接教程,是否可以轻松地自动化第二步,即saberworks手动创建最终数据结构 我的理解是,他只是使用输出来获得“线索”,某种指导,xml应该是什么样子。但是有没有可能生成一个完整的perl结构,供libXML使用(解析) 如果我们已经有了xml结构,xml::Compile/
.xsd
文件转换为xml结构
,之后可以通过libXML
或任何其他xml解析器
访问并完成
如果您阅读链接教程,是否可以轻松地自动化第二步,即saberworks手动创建最终数据结构
我的理解是,他只是使用输出来获得“线索”,某种指导,xml应该是什么样子。但是有没有可能生成一个完整的perl结构,供libXML
使用(解析)
如果我们已经有了xml结构,xml::Compile/xml::LibXML
如何处理可选元素?如果我没有在可选元素中放入任何值或元素,它是否会出现在最终的xml输出中?如果是这样的话,有没有办法防止这种情况发生
use warnings;
use strict;
use Data::Dumper;
use XML::Compile::Schema;
use XML::LibXML;
my $xsd = 'schema.xsd';
my $schema = XML::Compile::Schema->new($xsd);
my $xml_temp = $schema -> template('PERL', 'addresses');
# ***convert $xml_temp to "real" perl hash structure***
my $doc = XML::LibXML::Document->new('1.0', 'UTF-8');
my $write = $schema -> compile(WRITER => 'addresses');
my $xml = $write -> ($doc, $xml_temp);
$doc -> setDocumentElement($xml);
print $doc -> toString(1);
通常,您希望动态生成将要传递的数据 到XML编写器。为了帮助您生成正确的数据结构,template()方法提供了此类数据结构的字符串表示形式以及一些有用的注释。如果希望看到最小的示例,可以使用eval将字符串转换为实际的Perl数据结构 为了简单起见,我在修改后的示例脚本中包含了中的示例模式 关于第二个问题,我假设在输入中没有可选元素时,它们不会被放入XML中
use strict;
use warnings;
use Data::Dumper;
use XML::Compile::Schema;
use XML::LibXML;
my $schema = XML::Compile::Schema->new(q{<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:element name="addresses">
<xs:complexType>
<xs:sequence>
<xs:element ref="address" minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element ref="name" minOccurs='0' maxOccurs='1'/>
<xs:element ref="street" minOccurs='0' maxOccurs='1'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type='xs:string'/>
<xs:element name="street" type='xs:string'/>
</xs:schema>
} );
# this returns a string representation of a sample Perl datastructure
my $template = $schema->template('PERL', 'addresses');
print "The template:\n $template\n\n";
# turn the string representation into an actual Perl data structure
my $sample;
eval "\$sample = $template;";
print "The template turned into a Perl data structure:\n";
print Dumper( $sample );
print "\n\n";
# create XML from the sample Perl data structure
my $doc = XML::LibXML::Document->new('1.0', 'UTF-8');
my $write = $schema->compile(WRITER => 'addresses');
my $xml = $write->($doc, $sample);
$doc->setDocumentElement($xml);
print "The generated XML:\n";
print $doc->toString(1);
print "\n\n";
使用严格;
使用警告;
使用数据::转储程序;
使用XML::Compile::Schema;
使用XML::LibXML;
my$schema=XML::Compile::schema->new(q{
} );
#这将返回示例Perl数据结构的字符串表示形式
我的$template=$schema->template('PERL','addresses');
打印“模板:\n$template\n\n”;
#将字符串表示转换为实际的Perl数据结构
我的$sample;
评估“\$sample=$template;”;
打印“模板转换为Perl数据结构:\n”;
打印转储程序(示例);
打印“\n\n”;
#从示例Perl数据结构创建XML
我的$doc=XML::LibXML::Document->new('1.0','UTF-8');
我的$write=$schema->compile(WRITER=>'addresses');
my$xml=$write->($doc,$sample);
$doc->setDocumentElement($xml);
打印“生成的XML:\n”;
打印$doc->toString(1);
打印“\n\n”;
当然可以,但我没有找到一种方法将perl模板转换为perl数据结构,libXMLPlease可以使用它。请回答您的问题,并展示您迄今为止所做的尝试,这样我们就可以解决这个问题。请原谅我的无知,但是XSD文件已经是XML文件了。您的意思是希望将XSD解析为perl哈希,以便能够使用XML库处理它吗?