验证XML与对应XSD文件时出现S4s-elt-invalid-content.1错误如何解决
XML与XSD验证错误修复方案
报错直接触发原因
你收到的S4s-elt-invalid-content.1错误,最直接的原因是XSD语法大小写不匹配:XML Schema内置标签严格区分大小写,你写的<xs:Sequence>首字母大写不符合规范,标准写法为小写开头的<xs:sequence>。
除了这个问题外,你的XML和XSD文件还有多处语法和结构错误,全部修复后即可正常验证:
XSD文件需要修改的问题
- 元素嵌套结构错误:
<xs:complexType>必须作为对应<xs:element>的子节点嵌套在内部,你当前把link、availablecolors的complexType写在了对应element的闭合标签外,属于语法错误 - 子元素未用sequence包裹:
link节点下的子元素、availablecolors节点下的子元素都需要用<xs:sequence>包裹,不能直接放在complexType节点下 - 缺失字段定义:XML中
link节点包含tophp字段,但XSD中没有对应的定义,会触发验证不通过 - 单节点限制不符合实际:你当前的XSD只允许
queue下出现1个link节点,而XML中有2个link节点,需要给link元素添加maxOccurs="unbounded"属性允许多次出现
修复后的完整XSD代码
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="queue"> <xs:complexType> <xs:sequence> <xs:element name="link" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="uri" type="xs:string" /> <xs:element name="prodYear" type="xs:string" /> <xs:element name="tophp" type="xs:string" /> <xs:element name="availablecolors"> <xs:complexType> <xs:sequence> <xs:element name="color1" type="xs:string" /> <xs:element name="color2" type="xs:string" /> <xs:element name="color3" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XML文件需要修改的问题
- DOCTYPE声明位置错误:DOCTYPE必须放在XML声明之后、根节点打开标签之前,你当前把DOCTYPE写在了根节点内部,属于语法错误
- 重复根节点:你在根节点
<queue>内部又嵌套了一层<queue>节点,和XSD的根节点定义不匹配,需要删除多余的内层queue节点
修复后的完整XML代码
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="queue.xsl"?> <!DOCTYPE queue SYSTEM "queue.dtd"> <queue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="queue.xsd"> <link> <name>Alfa Romeo Giulia</name> <uri>https://en.wikipedia.org/wiki/Alfa_Romeo_Giulia_(952)</uri> <prodYear>2015</prodYear> <tophp>533</tophp> <availablecolors> <color1>Alfa Black</color1> <color2>Alfa White</color2> <color3>Alfa Rosso</color3> </availablecolors> </link> <link> <name>Audi A5</name> <uri>https://en.wikipedia.org/wiki/Audi_A5</uri> <prodYear>2007</prodYear> <tophp>444</tophp> <availablecolors> <color1>Tango red metallic</color1> <color2>Gotland Green Metallic</color2> <color3>Ibis White</color3> </availablecolors> </link> <!-- <link> <name></name> <uri></uri> <prodYear></prodYear> <tophp></tophp> <availablecolors> <color1></color1> <color2></color2> <color3></color3> </availablecolors> </link> --> </queue>
内容的提问来源于stack exchange,提问作者Paul C
相关产品推荐
相关产品推荐

