是否可以允许任何有效的XML作为XSD中元素的子级?

时间:2018-08-15 14:47:06

标签: xml xsd xsd-validation xml-validation

我知道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>

我觉得这是不可能的,因为没有很好的方法来解析类型...但是值得一问。

1 个答案:

答案 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"/>

另请参阅XML Schema that allows anything (xsd:any)

相关问题