目标:生成填充和写入XML输出,使用现有的XSD架构所需的Perl数据结构。
我做了什么:我已经安装了XML::Compile
,发现这里怎么使用它,并通读变形例的教程。 我已经处理使用CAM模板编辑器,以确保CAM可以生成从模板,这是可以的,我比较了XML输出到XSD以确保两个涉及我认为他们应该呈现方式的一例XML文件我的XSD文件。 他们是这样。
接下来,我只是指出XML::Compile::Schema
的XSD文件,然后问了模板字符串创建,问模板()的根元素作为XSD指定的开始。
什么是错的:“错误:无法找到的元素或属性‘[root_element_name]’
我的XSD并从那些我在我找到了例子看出不同。 下面是我有:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
<xs:annotation></xs:annotation>
<!-- Include XML Schema containing type definitions and data validation -->
<xs:include id="DataDefinitions" schemaLocation="DataDefinitions_XMLSchema.xsd"></xs:include>
<!-- Root element -->
<xs:element name="Metrics" type="metrics"></xs:element>
<xs:complexType name ="metrics">
<xs:sequence minOccurs ="1" maxOccurs ="1">
<xs:element name = ...></xs:element>
.
.
<xs:element name = ....></xs:element>
</xs:sequence>
</xs:complexType>
[other complexType definitions used above to type some of the elements in the complexType 'metrics']
</xs:schema>
几个元件的上述具有被然后我已经示出的部分如下所定义的类型,这就是所述XSD的本质。 我漏掉了太多,细节显然在这里,但我不认为(“希望”),这是相关的问题。
Perl的是非常简单的,即使错了:
use warnings;
use strict;
use XML::LibXML;
use XML::Compile;
my $xsd = 'C:\schema.xsd';
my $schema = XML::Compile::Schema=>new($xsd);
my $xml_template = $schema->template('PERL', 'Metrics');
这种失败,上述错误:
error: cannot find element or attribute named 'Metrics'
想我可能需要命名空间限定的时候不明白,当它不是,我有资格指标和所谓的
my $xml_template = $schema->template('PERL', 'mstns:Metrics');
和失败一样。
我见过定义根元素的其他例子完成,像这样:
<element name = "Metrics">
<complexType>
<sequence>
[etc]
</sequence>
</complexType>
</element>
而比这做的方式,我不知道问题出在允许的风格,XML ::编译不能识别一些变化。 我根本不知道如何确定为什么模板()没有找到我指定的元素。
建议?