验证XML所需的XSD文件帮助
我在编写用于验证特定XML格式的xsd文件时遇到问题。XML格式如下所示:验证XML所需的XSD文件帮助,xml,xsd,xml-validation,xsd-validation,Xml,Xsd,Xml Validation,Xsd Validation,我在编写用于验证特定XML格式的xsd文件时遇到问题。XML格式如下所示: <?xml version="1.0" encoding="UTF-8"?> <p:customers xmlns:p="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com NewXMLSchema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<p:customers xmlns:p="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com NewXMLSchema.xsd ">
<p:customer>
<p:name salutation="Mr."/>
<p:age>25</p:age>
<p:discount>6</p:discount>
</p:customer>
<p:customer>
<p:name salutation="Ms."/>
<p:age>35</p:age>
<p:discount>10</p:discount>
</p:customer>
........
........
</p:customers>
<name salutation="Mr.">XYZ NAme</name>
25
6.
35
10
........
........
客户数量会有所不同;它可能是一个或多个
这是我用来验证此XML的XSD:
<xs:complexType name="customerName">
<xs:attribute name="salutation" type="xs:string" default="Mr."></xs:attribute>
</xs:complexType>
<xs:simpleType name="customerAge">
<xs:restriction base="xs:integer">
<xs:minInclusive value="18"></xs:minInclusive>
<xs:maxInclusive value="60"></xs:maxInclusive>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="customerdiscount">
<xs:restriction base="xs:integer">
<xs:minInclusive value="5"></xs:minInclusive>
<xs:maxInclusive value="30"></xs:maxInclusive>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="name" type="customerName"></xs:element>
<xs:element name="age" type="customerAge"></xs:element>
<xs:element name="discount" type="customerdiscount"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="customers">
<xs:complexType>
<xs:sequence>
<xs:element name="customer" type="customer"></xs:element>
<xs:element name="customer" type="customer"></xs:element>
<xs:element name="customer" type="customer"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
在上述XSD中,我面临一些问题,需要解决:
1) 我希望名称是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<p:customers xmlns:p="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com NewXMLSchema.xsd ">
<p:customer>
<p:name salutation="Mr."/>
<p:age>25</p:age>
<p:discount>6</p:discount>
</p:customer>
<p:customer>
<p:name salutation="Ms."/>
<p:age>35</p:age>
<p:discount>10</p:discount>
</p:customer>
........
........
</p:customers>
<name salutation="Mr.">XYZ NAme</name>
XYZ名称
2) 客户名称可以是一个或多个。在上面的代码中,我使用了sequence,因此可以有3个客户,而且只有3个客户。这件事我需要纠正
请帮我处理XSD中的这两件事
关于,我希望这有助于:
1) 可以将xs:string扩展为具有以下属性的复杂类型:
<xs:element name="name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="salutation" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
2) 您可以使用minOccurs和maxOccurs:
<xs:element name="customer" type="customer" minOccurs="1" maxOccurs="unbounded"/>
此外,我认为您需要在顶部指定模式的目标命名空间:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.w3schools.com"
xmlns:p="http://www.w3schools.com">
和使用p作为类型引用的前缀(因为模式定义的所有类型都在目标命名空间中):
通过这些更改,我可以成功地验证上面的文档(删除点)