最终,我想在 Flask 应用程序中基于 XSD 模式构建一个示例 xml 文件,然后将输入导出为有效的 xml 文件。
我也在使用 xmlschema 包。
我有一个烧瓶应用程序和页面的基本结构,其中包含一个显示 XSD 元素的下拉菜单。
@app.route('/xml_builder')
def xml_builder():
xs = xmlschema.XMLSchema('schema_file.xsd')
dict = sorted(xs.maps.elements.keys())
return render_template('public/xml-builder.html', get = dict)
但是,我正在努力获取/理解如何使其仅显示来自主 xsd 的元素(模式 file.xsd,如下所述) - 从下拉菜单中选择该元素时,它应该显示相关的子元素/ 来自其他 xsd 文件(schema_types.xsd,如下所述)的属性作为标签,旁边有一个文本字段,允许用户输入一个值。
架构由多个架构组成
schema_file.xsd 是主模式,描述了 xml 文件的结构
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="schema_types.xsd" />
<xsd:complexType name="InfoData">
<xsd:sequence>
<xsd:element name="Shop"
type="test:ShopType"
maxOccurs="unbounded" />
<xsd:element name="Town"
type="test:TownType"
minOccurs="0"
maxOccurs="unbounded" />
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
并且 schema_types.xsd 文件包含元素的结构
<xsd:complexType name="ShopType">
<xsd:sequence>
<xsd:element name="Country"
type="xsd:string"
minOccurs="0">
</xsd:element>
<xsd:element name="City"
type="xsd:string"
minOccurs="0">
</xsd:element>
<xsd:element name="Note"
type="xsd:string"
minOccurs="0"
maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id"
type="xsd:string"
use="required">
</xsd:attribute>
<xsd:attribute name="name"
type="xsd:string"
use="required">
</xsd:attribute>
</xsd:complexType>
任何方向/指导将不胜感激