【问题标题】:Error: premature end of file for XML document?错误:XML 文档的文件过早结束?
【发布时间】:2017-11-07 10:48:25
【问题描述】:

我必须从这个图中生成 XML 和 XSD:

但是会弹出一个错误:文件过早结束。 我还遇到另一个错误:xsd:all must terminate with end tag 我的代码正确吗?

实体关系约束:

1. A theater can have at least 1 screen but not more than 3. 
2. A screen may have many shows and sometimes it may not have any show. 
   show-time example - 10 AM, 12 PM etc. 
3. A show has information on the movie which has the director name, title 
   and the release date which can occur in any order. 
4. A movie will have actors and actors may have many actor's name.

代码:

<?xml version="1.0" encoding="UTF-8"?>
<theater>
<name>rajat</name>
<address>mumbai</address>
<phone>987654</phone>
    <screen>
        <seats>30</seats>
        <width>30</width>
            <show>
                <show-time>10 AM</show-time>
                    <movie>
                        <director>jade</director>
                        <title>game</title>
                        <release-date>10/10/2017</release-date>
                            <actors>
                                <name>james</name>
                                <name>aaron</name>
                            </actors>
                    </movie>
            </show>
    </screen>
</theater>

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema" 
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:element name="theater">
<xsd:complexType>
<xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="address" type="xsd:string"/>
    <xsd:element name="phone" type="xsd:long"/>
    <xsd:element name="screen" maxOccurs="3"/>                
<xsd:complexType>
<xsd:sequence>
    <xsd:element name="seats" type="xsd:byte"/>
    <xsd:element name="width" type="xsd:byte"/>
    <xsd:element name="show" minOccurs="0"/>
<xsd:complexType>
<xsd:sequence>
    <xsd:element name="show-time" type="xsd:string" maxOccurs="unbounded" 
    minOccurs="0"/>
    <xsd:element name="movie"/>
<xsd:complexType>
<xsd:all>
    <xsd:element name="director" type="xsd:string"/>
    <xsd:element name="title" type="xsd:string"/>
    <xsd:element name="release-date" type="xsd:string"/>
    <xsd:element name="actors"/>
<xsd:complexType>
<xsd:sequence>
    <xsd:element name="name" type="xsd:string" maxOccurs="unbounded" 
    minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence> 
</xsd:complexType>
</xsd:element>
</xsd:schema>

【问题讨论】:

  • 您的 XML 是有效的,如果这是您所要求的。您还没有提供应该阅读它的代码。
  • 我也添加了 xsd。基本上我必须同时生成 XML 和 XSD
  • 您的 XSD 无效有效。使用具有突出显示和适当缩进的编辑器。您有几个不匹配的打开/关闭标签。

标签: xml xsd


【解决方案1】:

第一:

xmlns:xsd="https://www.w3.org/2001/XMLSchema" 

必须改为

xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

第二:

    <xsd:element name="screen" maxOccurs="3"/>
      <xsd:complexType>

必须改为

    <xsd:element name="screen" maxOccurs="3">
      <xsd:complexType>

上述类型的错误发生在多个地方。

第三:

最后,使用 XML 编辑器并平衡结束标签。


总而言之,您的 XSD 在语法上是有效的:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xsd:element name="theater">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element name="address" type="xsd:string"/>
        <xsd:element name="phone" type="xsd:long"/>
        <xsd:element name="screen" maxOccurs="3">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="seats" type="xsd:byte"/>
              <xsd:element name="width" type="xsd:byte"/>
              <xsd:element name="show" minOccurs="0">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="show-time" type="xsd:string" 
                                 maxOccurs="unbounded" 
                                 minOccurs="0"/>
                    <xsd:element name="movie">
                      <xsd:complexType>
                        <xsd:all>
                          <xsd:element name="director" type="xsd:string"/>
                          <xsd:element name="title" type="xsd:string"/>
                          <xsd:element name="release-date" type="xsd:string"/>
                          <xsd:element name="actors">
                          <xsd:complexType>
                            <xsd:sequence>
                              <xsd:element name="name" type="xsd:string" 
                                           maxOccurs="unbounded" 
                                           minOccurs="0"/>
                            </xsd:sequence>
                          </xsd:complexType>
                          </xsd:element>
                        </xsd:all>
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

对您的 XML 文档的验证留给您做一个练习。

【讨论】:

  • 我这边的愚蠢错误。谢谢您的帮助。我现在已经解决了这个问题:)
猜你喜欢
  • 2017-01-11
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多