XSD: Define an element with any name

后端 未结 1 2082
猫巷女王i
猫巷女王i 2021-02-08 23:48

Because of limitations of certain systems, we need to use XMLs that are formatted a bit inconveniently. Those we need to transform into a convenient form.

The question:

相关标签:
1条回答
  • 2021-02-09 00:31

    You can use the <xsd:any /> element together with the Xml Schema Instance type attribute.

    Schema

    <?xml version="1.0" encoding="utf-8" ?>
    <xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="root">
            <xsd:complexType>
                <xsd:sequence maxOccurs="unbounded">
                    <xsd:any processContents="strict" namespace="##local"></xsd:any>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:simpleType name="st">
            <xsd:restriction base="xsd:string" />
        </xsd:simpleType>
    </xsd:schema>
    

    Test Xml instance

    <?xml version="1.0" encoding="utf-8"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <!-- valid -->
        <one xsi:type="st">value one</one>
        <emptyone xsi:type="st"/>
    
        <!-- invalid -->
        <two name="myname" xsi:type="st">value two</two>
    
        <!-- invalid -->
        <three xsi:type="st">
            <four xsi:type="st">value four</four>
        </three>
    </root>
    

    Conclusion

    You cannot enforce a simple type in the xsd schema alone.

    0 讨论(0)
提交回复
热议问题