XSD为XML命名空间与无命名空间的元素结合
问题描述:
我收到这样的XML:XSD为XML命名空间与无命名空间的元素结合
<?xml version="1.0" encoding="utf-8"?>
<root-element xmlns="SomeSpecificNameSpace">
<some-elements />
<some-other-elements/>
<some-other-other-element/>
<element-with-empty-namespace xmlns=""/>
</root-element>
我必须做一个检查,我已经这个element-with-empty-namespace
,但我不关心的内容,所以我尝试了以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="SomeSpecificNameSpace"
elementFormDefault="qualified"
xmlns="SomeSpecificNameSpace"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MyRootElement">
<xs:complexType>
<xs:sequence>
<!-- Others types here -->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="element-with-empty-namespace" minOccurs="0" maxOccurs="1" xmlns="">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
</xs:schema
但似乎它不接受我的元素,他说,它期待一个元素与命名空间SomeSpecificNameSpace
。
我知道这个结构有点奇怪,但是这个element-with-empty-namespace
是我们通过XML提供的一个“价值”。
答
多个名称空间需要多个XSD。
为了支持您的XML输入结构,
<?xml version="1.0" encoding="utf-8"?>
<root-element xmlns="SomeSpecificNameSpace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="SomeSpecificNameSpace try.xsd">
<some-elements />
<some-other-elements/>
<some-other-other-element/>
<element-with-empty-namespace xmlns=""/>
</root-element>
打破你的XSD成两个文件如下...
在主XSD文件,它支配着SomeSpecificNameSpace
命名空间,使用xs:import
,
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="SomeSpecificNameSpace"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="element-with-empty-namespace.xsd"/>
<xs:element name="root-element">
<xs:complexType>
<xs:sequence>
<xs:element name="some-elements"/>
<xs:element name="some-other-elements"/>
<xs:element name="some-other-other-element"/>
<xs:element ref="element-with-empty-namespace"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
并导入第二XSD,
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="element-with-empty-namespace">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
</xs:schema>
在没有命名空间中包含element-with-empty-namespace
元素。
我相信'element-with-empty-namespace''只是通过在'root-element'内部声明而继承'SomeSpecificNamespace' – sblandin
是的,但是我的输入xml在任何地方都没有相同的名称空间 – J4N
您需要的XML处理过程与您提供的样品完全相同?我在谈论XML而不是xsd。 – sblandin