![](/img/trans.png)
[英]Error in xml when using xpath .. The prefix “xsi” for attribute “xsi:type” associated with an element type “value” is not bound
[英]Getting namespace error when creating XSD for XML which has custom xsi:type element
我正在尝试为小型 XML 创建 XSD,它在根元素中的默认命名空间为<POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/">
。 在根元素下有<object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="A">
命名空间以及自定义xsi:type
。 以下是 XML 和 XSD。
<?xml version="1.0" encoding="UTF-8"?>
<POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/">
<object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="A">
<elt1>test1</elt1>
<elt2>test2</elt2>
<elt3>test3</elt3>
</object>
<SequenceNumber xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" xmlns="">3</SequenceNumber>
</POSLog>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" targetNamespace="http://www.nrf-arts.org/IXRetail/namespace/" attributeFormDefault="unqualified" elementFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="schema1.xsd" />
<xs:element name="POSLog">
<xs:complexType>
<xs:sequence>
<xs:element ref="object" />
<xs:element ref="SequenceNumber" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="object">
<xs:sequence>
<xs:element name="elt1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="A">
<xs:complexContent>
<xs:extension base="object">
<xs:sequence>
<xs:element name="elt2" type="xs:string"/>
<xs:element name="elt3" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SequenceNumber" type="xs:unsignedByte" />
<xs:element name="object" type="object" />
</xs:schema>
当我尝试验证 XSD 时,出现以下错误。 出现该错误的原因是<object>
元素也在尝试使用默认命名空间进行验证。
错误:元素“{http://www.w3.org/2001/XMLSchema}schema”:没有可用于验证根的匹配全局声明。
我的要求是为上述示例 XML 生成有效的 XML 模式。
要调整您的 XSD 以验证您的 XML:
观察POSLog
和object
在"http://www.nrf-arts.org/IXRetail/namespace/"
命名空间中,而SequenceNumber
不在任何命名空间中。
因此,对您的定义进行分组,使POSLog
和object
在一个 XSD ( object.xsd
) 中,而SequenceNumber
在另一个 ( schema1.xsd
) 中。
相应地重新分配您的类型定义。
以下是验证您的 XSD 所需的一整套调整 XML:
<?xml version="1.0" encoding="UTF-8"?>
<POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nrf-arts.org/IXRetail/namespace/ object.xsd">
<object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="A">
<elt1>test1</elt1>
<elt2>test2</elt2>
<elt3>test3</elt3>
</object>
<SequenceNumber xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" xmlns="">3</SequenceNumber>
</POSLog>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/"
targetNamespace="http://www.nrf-arts.org/IXRetail/namespace/"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="schema1.xsd"/>
<xs:element name="POSLog">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns2:object" />
<xs:element ref="SequenceNumber" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="object" type="ns2:object" />
<xs:complexType name="object">
<xs:sequence>
<xs:element name="elt1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="A">
<xs:complexContent>
<xs:extension base="ns2:object">
<xs:sequence>
<xs:element name="elt2" type="xs:string"/>
<xs:element name="elt3" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SequenceNumber" type="xs:unsignedByte" />
</xs:schema>
我找到了上述错误的原因。
在 object.xsd 中,我添加了elementFormDefault="qualified"
属性,并更改了元素 object 类型。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.nrf-arts.org/IXRetail/namespace/" targetNamespace="http://www.nrf-arts.org/IXRetail/namespace/" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="schema1.xsd" />
<xs:complexType name="A">
<xs:sequence>
<xs:element name="elt1" type="xs:string"/>
<xs:element name="elt2" type="xs:string"/>
<xs:element name="elt3" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="POSLog">
<xs:complexType>
<xs:sequence>
<xs:element name="object">
</xs:element>
<xs:element ref="SequenceNumber" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.