混合=#&34;真"在XML XSD中

时间:2014-03-09 04:39:56

标签: xml xsd

我正在使用以下XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="root">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element name="value" minOccurs="1" maxOccurs="5" type="new_type"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="new_type" mixed="true">
    <xs:choice>
      <xs:element name="function"/>
      <xs:element name="something_else"/>
    </xs:choice>
  </xs:complexType>
</xs:schema>

以下XML文件在线失败:abc

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="test.xsd" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema">  
    <value><function/></value>
    <value><function/></value>
    <value>abc</value>
    abc
</root>

尽管XML第11行的complexType new_type为mixed =“true”,但此XML文件的验证失败,因为它需要在xs:choice中指定一个元素。

除了元素之外,我还需要能够指定一个值。

我应该如何更改我的XSD文件?

谢谢,

鲍里斯

1 个答案:

答案 0 :(得分:1)

如果您向minOccurs="0"添加<xsd:choice>,则会验证:

  <xs:complexType name="new_type" mixed="true">
    <xs:choice minOccurs="0">
      <xs:element name="function"/>
      <xs:element name="something_else"/>
    </xs:choice>
  </xs:complexType>

否则,您需要在中添加一个元素到您可能拥有的任何字符数据。