我知道XSD的全部目的是定义XML的结构,但是是否可以让子对象成为 任何有效的XML ?例如:
如果我有这个XSD
<xsd:complexType name="soExample">
<xsd:all>
<xsd:element name="field1" type="xsd:integer" />
</xsd:all>
</xsd:complexType>
有效的XML是
<soExample>
<field1>25</field1>
</soExample>
现在,我想要一个特殊的字段field2
,该字段允许我将所有可以解析的XML放入内部,XSD看起来像这样:
<xsd:complexType name="soExample">
<xsd:all>
<xsd:element name="field1" type="xsd:integer" />
<xsd:element name="field2" type="so:special" />
</xsd:all>
</xsd:complexType>
有效的XML将是:
<soExample>
<field1>25</field1>
<field2>
<anything>3</anything>
</field2>
</soExample>
或
<soExample>
<field1>25</field1>
<field2>
<cars>
<favorite>"miata"</favorite>
</cars>
</field2>
</soExample>
我觉得这是不可能的,因为没有很好的方法来解析类型...但是值得一问。
答案 0 :(得分:1)
是,xsd:any
的目的是在XML文档中的给定点允许 任何 XML > >
<xsd:element name="field2"/>
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="skip"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
有关xsd:any/@processContents
支持的各种值的说明,请参见processContents strict vs lax vs skip for xsd:any。
注意,您也可以根本不指定field2
的内容模型:
<xsd:element name="field2"/>