目标:使用现有的XSD架构生成填充和编写XML输出所需的Perl数据结构.
我做了什么:我已经安装XML::Compile,找到了如何使用它的教程,并在这里阅读修改过的示例.我已经使用CAM模板编辑器处理了我的XSD文件,以确保CAM可以从模板中生成示例XML文件,我可以将XML输出与XSD进行比较,以确保两者的关联方式与我认为的相应.他们是这样.
接下来,我只是指向XML::Compile::SchemaXSD文件,然后询问是否创建了模板字符串,要求template()从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>
Run Code Online (Sandbox Code Playgroud)
上面的几个元素的类型然后在我所示的部分下面定义,这是XSD的本质.我在这里清楚地省略了很多细节,但我不认为('希望')它与问题有关.
即使错误,Perl也非常简单:
use warnings; …Run Code Online (Sandbox Code Playgroud)