XML 验证期间可能出现命名空间问题
Possible namespace problem during XML validation
以下 XML 和 XSD 导致验证错误:
The element 'choices' in namespace 'http://www.test.it'
has invalid child element 'choice' in namespace 'http://www.test.it'
. List of possible elements expected: 'choice'.
这是choices.xml
:
<?xml version="1.0" encoding="utf-8"?>
<choices xmlns="http://www.test.it"
xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
xsd:schemaLocation="http://www.test.it ./schema/choices.xsd">
<choice>yes</choice>
</choices>
这是schema/choices.xsd
:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://www.test.it"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.test.it">
<xs:simpleType name="yes_or_no_t">
<xs:restriction base="xs:string">
<xs:enumeration value="yes" />
<xs:enumeration value="no" />
</xs:restriction>
</xs:simpleType>
<xs:element name="choices" >
<xs:complexType>
<xs:all>
<xs:element name="choice" type="yes_or_no_t" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
我必须将 xmlns="http://www.test.it"
保留在 XML 中。 XML 和 XSD 是本地文件(不通过网络发布)。我宁愿将 XSD 保存在 schema
子目录中。
有两个问题...
找到 XSD
使用 xsi:schemaLocation
命名空间 XML,例如你的命名空间,而不是 xsi:noNamespaceSchemaLocation
。
另请参阅:
- How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
- How to reference a local XML Schema file correctly?
合格元素
将 elementFormDefault="qualified"
添加到 XSD 的架构元素中。
另请参阅:
- What does elementFormDefault do in XSD?
以下 XML 和 XSD 导致验证错误:
The element 'choices' in namespace
'http://www.test.it'
has invalid child element 'choice' in namespace'http://www.test.it'
. List of possible elements expected: 'choice'.
这是choices.xml
:
<?xml version="1.0" encoding="utf-8"?>
<choices xmlns="http://www.test.it"
xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
xsd:schemaLocation="http://www.test.it ./schema/choices.xsd">
<choice>yes</choice>
</choices>
这是schema/choices.xsd
:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://www.test.it"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.test.it">
<xs:simpleType name="yes_or_no_t">
<xs:restriction base="xs:string">
<xs:enumeration value="yes" />
<xs:enumeration value="no" />
</xs:restriction>
</xs:simpleType>
<xs:element name="choices" >
<xs:complexType>
<xs:all>
<xs:element name="choice" type="yes_or_no_t" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
我必须将 xmlns="http://www.test.it"
保留在 XML 中。 XML 和 XSD 是本地文件(不通过网络发布)。我宁愿将 XSD 保存在 schema
子目录中。
有两个问题...
找到 XSD
使用 xsi:schemaLocation
命名空间 XML,例如你的命名空间,而不是 xsi:noNamespaceSchemaLocation
。
另请参阅:
- How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
- How to reference a local XML Schema file correctly?
合格元素
将 elementFormDefault="qualified"
添加到 XSD 的架构元素中。
另请参阅:
- What does elementFormDefault do in XSD?