如何编写包含字符串类型和子元素的xsd元素?

时间:2015-04-15 03:58:39

标签: xml xsd

我正在尝试在xml文件下面编写xsd文件。

<?xml version="1.0" ?>
<booklist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="p5_09_final.xsd">

  <book kind="novel"> Purpose-Driven Life
    <price>9000</price>
  </book>

  <book kind="computer"> XML and Ontology
    <price>5000</price>
  </book>
</booklist>

我尝试为这个xml文件编写xsd文件。 但是我无法处理包括字符串类型和子元素价格在内的书元素。 如何为此xml文件编写validate xsd文件?这是我写的xsd文件。这是无效的

<?xml version="1.0" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!-- 

     -->
    <xsd:element name="booklist">
      <xsd:complexType>
         <xsd:sequence>
           <xsd:element name="book" type="ctBook" minOccurs="0" maxOccurs="unbounded" />
         </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="ctBook" >
      <xsd:sequence>
         <xsd:element name="price" type="xsd:int" />
      </xsd:sequence>
      <xsd:attribute name="kind" type="ctKind" />
    </xsd:complexType>

    <xsd:simpleType name="ctKind">
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="computer" />
        <xsd:enumeration value="novel" />
      </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>

1 个答案:

答案 0 :(得分:1)

如果您希望能够插入文字和标签,则需要为图书使用混合内容类型。只需将mixed属性添加到ctBook complexType

即可
<xsd:complexType name="ctBook" mixed="true">

但是,请注意,您无法控制文本的显示位置。它可以在<price>元素之前和之后(或两者)。