【发布时间】:2014-10-31 07:28:06
【问题描述】:
我在验证 XML 时收到以下错误
命名空间“http://www.test.com/test”中的元素“根”无效 命名空间“http://www.test.com/test”中的子元素“学生”。列表 预期的可能元素数:“学生”。
我无法发布实际的 XSD,但我准备了一个小型 XSD 来复制该问题。另外,我无法控制 XSD,因为它是由客户端提供的。示例 XSD 如下所示。
<xs:schema xmlns:stu="http://www.test.com/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.test.com/test"
elementFormDefault="unqualified"
attributeFormDefault="unqualified"
version="1.2">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Student" type="stu:Student" minOccurs="1" maxOccurs="1">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="Date">
<xs:restriction base="xs:date">
<xs:minInclusive value="0001-01-01"/>
<xs:maxInclusive value="9999-12-31"/>
<xs:pattern value="\p{Nd}{4}-\p{Nd}{2}-\p{Nd}{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="String100">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Student">
<xs:sequence>
<xs:element name="StudentName" type="stu:String100" nillable="false"/>
<xs:element name="AdmissionDate" type="stu:Date" nillable="false"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
我根据提供的 XSD 和我拥有的数据生成 XML。 XML 生成如下。
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://www.test.com/test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Student>
<StudentName>StudentName1</StudentName>
<AdmissionDate>2010-01-01</AdmissionDate>
</Student>
</Root>
我在 stackoverflow The element "x" in namespace "xSchema" has invalid child element "y" in namespace "xSchema". List of possible elements expected: "y" 上检查了这个线程,但它指出我们应该删除前缀使用
<order>
而不是
<os:order>.
但在我的例子中,XML 已经像这样生成了。我该如何克服这个问题?
我还使用 XSD 中的 Visual Studio 生成了示例 XML,看看有什么不同。验证的示例 XML 只有一行不同
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://www.test.com/test">
<Student xmlns=""> <!-- JUST THIS xmlns="" ADDED prevents the issue -->
<StudentName>StudentName1</StudentName>
<AdmissionDate>2010-01-01</AdmissionDate>
</Student>
</Root>
添加 xmlns="" 有什么不同?我正在寻找替代解决方案和问题的原因。请帮忙。
【问题讨论】: