如何在使用targetNamespace时引用十六进制整数simpletype - 它可以不用 我不知道如何解决这个问题,我发现的所有例子都没有使用targetNamespace属性
使用http://www.freeformatter.com/xml-validator-xsd.html 测试schema / xml
我的xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://foo.xsd">
<xs:simpleType name="hex-integer">
<xs:restriction base="xs:string">
<xs:pattern value="0x[0-9a-fA-F]+"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="TheElements">
<xs:complexType>
<xs:sequence>
<xs:element name="MyElement">
<xs:complexType>
<xs:attribute type="hex-integer" name="TheValue" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="MyOtherElement">
<xs:complexType>
<xs:attribute type="hex-integer" name="TheOtherValue" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我的xml
<?xml version="1.0" encoding="utf-8"?>
<TheElements>
<MyElement TheValue="0x20" />
<MyOtherElement TheOtherValue="0x30" />
</TheElements>
更新:基于42个答案,我能够解析一些xml文件 但在xml文件中发现了名称空间错误的另一个问题
问题:我有很多简单/中等的komplex xml文件,我无法更改,但仍想模式验证它们
我的环境:C ++,Xerces C ++ 3.1.1
名称空间未使用的示例
<?xml version="1.0" encoding="utf-8"?>
<TheElements xmlns="">
<MyElement TheValue="0x20" />
<MyOtherElement TheOtherValue="0x30" />
</TheElements>
<?xml version="1.0" encoding="utf-8"?>
<TheElements xmlns="http://foo.xsd">
<MyElement TheValue="0x20" />
<MyOtherElement TheOtherValue="0x30" />
</TheElements>
<?xml version="1.0" encoding="utf-8"?>
<TheElements xmlns="http://foo.xsd">
<MyElement xmlns="" TheValue="0x20" />
<MyOtherElement TheOtherValue="0x30" />
</TheElements>
答案 0 :(得分:3)
您需要像这样编写XSD:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://foo.xsd" xmlns:tns="http://foo.xsd" >
<xs:simpleType name="hex-integer">
<xs:restriction base="xs:string">
<xs:pattern value="0x[0-9a-fA-F]+"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="TheElements">
<xs:complexType>
<xs:sequence>
<xs:element name="MyElement">
<xs:complexType>
<xs:attribute type="tns:hex-integer" name="TheValue" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="MyOtherElement">
<xs:complexType>
<xs:attribute type="tns:hex-integer" name="TheOtherValue" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
您还需要在实例文档中声明命名空间:
<?xml version="1.0" encoding="utf-8"?>
<TheElements xmlns="http://foo.xsd">
<MyElement TheValue="0x20" />
<MyOtherElement TheOtherValue="0x30" />
</TheElements>
由于模式具有targetNamespace="http://foo.xsd"
声明,因此全局类型定义将属于该命名空间,您必须使用该命名空间引用它们。