验证 xml 时出现“根元素之前的文档中的标记必须格式正确”错误

Posted

技术标签:

【中文标题】验证 xml 时出现“根元素之前的文档中的标记必须格式正确”错误【英文标题】:"The markup in the document preceding the root element must be well-formed" error while validating xml 【发布时间】:2013-05-05 04:28:16 【问题描述】:

我对 xml 很陌生,所以请原谅我的愚蠢问题。 好吧,我有这样的架构

 <?xml version="1.0" encoding="UTF-8" ?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 elementFormDefault="qualified">
 <xs:element name="Product">
   <xs:complexType>
     <xs:sequence>
        <xs:element name= "name" type = "xs:string"/>
        <xs:element name= "price" type = "xs:decimal"/>
        <xs:element name= "Fish">
             <xs:complexType>
                <xs:sequence>
                    <xs:element name= "Type">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="herbivourus"/>
                                <xs:enumeration value="predator"/>
                                <xs:enumeration value="detritophages"/>
                                <xs:enumeration value="omnivourus"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="Clown">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                                <xs:element name="Character" >
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="Slow"/>
                                            <xs:enumeration value="Quiet"/>
                                            <xs:enumeration value="Fearful"/>
                                            <xs:enumeration value="Motile"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>
                                <xs:element name="Agressiveness">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="HIGH"/>
                                            <xs:enumeration value="MEDIUM"/>
                                            <xs:enumeration value="LOW"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>

                               <xs:element name="gotSpikes" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>
                     <xs:element name="Lionfish">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                               <xs:element name="gotSpikes" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>
                      <xs:element name="Triggerfish">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                               <xs:element name="needsHideout" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>
                      <xs:element name="Trumpetfish">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                               <xs:element name="gregarious" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>
                      <xs:element name="Yellow_boxfish">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                               <xs:element name="gregarious" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="reptile">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="compatibleWithFish" type= "xs:boolean"/>
                    <xs:element name="needsLand" type= "xs:boolean"/>
                    <xs:element name="turtle">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                               <xs:element name="gregarious" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>  
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="decoration">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="size" type= "xs:int"/>
                    <xs:element name="alga">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                                <xs:element name="doesGetsOxygen" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>  
                     <xs:element name="castle">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="serialVersionUID" type="xs:long"/>
                                <xs:element name="isHideOut" type="xs:boolean"/>
                            </xs:sequence>
                        </xs:complexType>
                     </xs:element>  
                </xs:sequence>
            </xs:complexType>
        </xs:element>
     </xs:sequence>
   </xs:complexType>
 </xs:element>
 </xs:schema>

实际上还有我的 xml

<?xml version="1.0" encoding="UTF-8"?>
    xsi:schemaLocation="tank.xsd">
    <Product>
    <<Fish>
            <Clown name = "Clown">
                <serialVersionUID>
                    -7114819146190513293L
                </serialVersionUID>
                <Character>QUIET</Character>
                <Aggressiveness>LOW</Aggressiveness>
                <gotSpikes>false</gotSpikes>
                <type> herbivourus</type>
                <price> 51000 </price>

            </Clown>
            <Lionfish>
                <serialVersionUID>
                    5302423581237004299L
                </serialVersionUID>
                <price>25000</price>
                <name> Lionfish </name>
                <type> herbivourus</type>
                <gotSpikes>true</gotSpikes>
            </Lionfish>
            <Triggerfish>
                <serialVersionUID>
                    4102072582518577014L
                </serialVersionUID>
                <price>27000</price>
                <name> Triggerfish </name>
                <type> herbivourus</type>
                <needsHideout>true</needsHideout>
            </Triggerfish>
            <Trumpetfish>
                <serialVersionUID>
                     -6802935171639886135L
                </serialVersionUID>
                <price>34500</price>
                <name> Trumpetfish </name>
                <type> herbivourus</type>
                <gregarious> true</gregarious>
            </Trumpetfish>
            <Yellow_boxfish>
                <serialVersionUID>
                     4377441012026861992L
                </serialVersionUID>
                <price>56900</price>
                <name> Yellow_boxfish </name>
                <type> herbivourus</type>
                <gregarious> true</gregarious>
            </Yellow_boxfish>
    </Fish>
    <Reptile>
            <Turtle>
                <serialVersionUID>
                    -3606085842515781016L
                </serialVersionUID>
                <price>129000</price>
                <name> Turtle </name>
                <compatibleWithFish> true</compatibleWithFish>
                <needsLand>true</needsLand>
                <gregarious> true </gregarious>
            </Turtle>
    </Reptile>
    <Decoration>
            <Alga>
                <serialVersionUID>
                    -4311096533955485410L
                </serialVersionUID>
                <price>15000</price>
                <name> alga </name>
                <doesGetOxygen> true</doesGetOxygen>
            </Alga>
            <Castle>
                <serialVersionUID>
                    1L
                </serialVersionUID>
                <price>110300</price>
                <name> Castle </name>
                <ishideout> true</ishideout>
            </Castle>
    </Decoration>
</Product>

顺便说一句,我也有这样的类层次结构

抽象产品 抽象鱼 小丑 狮子鱼 扳机鱼 喇叭鱼 Yellow_boxfish 抽象爬行动物 乌龟 抽象装饰 藻类 卡斯尔 验证器的输出是“根元素之前的文档中的标记必须格式正确” 所以请指点我有什么问题

附:我需要在 xsd 中显示类的层次结构,并且基类是产品类,并且所有子类都将具有字段名称和价格,所以我不确定它是否在我的模式中正确显示:C 和 btw 然后我去实例化这个类

【问题讨论】:

它比你想象的要简单得多。你的根元素应该是Product,对吧?在那之前是什么?然后看看 XML。查看前几个元素。 不,我知道这很简单,但你能不能写出正确的变体,因为我有点困惑哈哈:C 去掉第二行。将&lt;&lt;Fish 更改为&lt;Fish 【参考方案1】:

因为你没有正确配置你的根元素所以正确的配置很重要

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<root>
  Paste your code here
</root>

请根据本示例中的建议粘贴您的代码。因此,无论它是什么,都将您的代码粘贴到您的根子句中。然后错误将被短路。

【讨论】:

以上是关于验证 xml 时出现“根元素之前的文档中的标记必须格式正确”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 wcf rest 中发送 xml 请求时出现错误请求 400

使用验证器和 textinput 的 errorString 时出现红色和蓝色的问题

读取 XML 元素时出现异常

使用 WebLogic 解析 XML 时出现 ClassCastException

将 XML 读入 DataTable 时出现 FormatException

使用 XSL 解析 XML 时出现问题