首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从XSD架构中选择要填充到Flask应用程序中的元素

从XSD架构中选择要填充到Flask应用程序中的元素
EN

Stack Overflow用户
提问于 2020-04-01 20:14:01
回答 1查看 157关注 0票数 0

最终,我想在Flask应用程序中基于XSD模式构建一个示例xml文件,然后将输入导出为有效的xml文件。

我也在使用xmlschema包。

我有一个烧瓶应用程序的基本结构和一个下拉菜单显示从XSD的元素页面。

代码语言:javascript
运行
复制
@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文件的结构。

代码语言:javascript
运行
复制
<?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文件包含元素的结构

代码语言:javascript
运行
复制
<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>

任何方向/指导都将非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-01 23:42:11

“主模式”和“其他xsd文件”之间的区别取决于您的场景。XML模式没有这样的区别,我希望xmlschema Python模块也不会有这种区别。

如果可能,您应该为主模式声明一个targetNamespace,为子元素模式声明一个不同的targetNamespace。您还需要将xs:include更改为xs:import。然后,您可以根据元素的名称空间选择元素。

请记住,此解决方案将非常特定于您自己的模式。XSD的通用示例文档生成器是一个大项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60970638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档