最终,我想在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>
任何方向/指导都将非常感谢。
发布于 2020-04-01 15:42:11
“主模式”和“其他xsd文件”之间的区别取决于您的场景。XML模式没有这样的区别,我希望xmlschema Python模块也不会有这种区别。
如果可能,您应该为主模式声明一个targetNamespace,为子元素模式声明一个不同的targetNamespace。您还需要将xs:include更改为xs:import。然后,您可以根据元素的名称空间选择元素。
请记住,此解决方案将非常特定于您自己的模式。XSD的通用示例文档生成器是一个大项目。
https://stackoverflow.com/questions/60970638
复制相似问题