验证 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
去掉第二行。将<<Fish
更改为<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 时出现红色和蓝色的问题
使用 WebLogic 解析 XML 时出现 ClassCastException