如何编写复杂类型中序列一部分的各种重复元素?
我有以下架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Measurements">
<xs:annotation>
<xs:documentation>Schema for Measurements data transmission</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="m_doc" type="xs:string"/>
<xs:element name="m_parameters">
<xs:complexType>
<xs:sequence>
<xs:element name="m_name" type="xs:string"/>
<xs:element name="m_isEngValue" type="xs:boolean"/>
<xs:element name="m_unit" type="xs:string"/>
<xs:element name="m_radix" type="xs:string"/>
<xs:element name="m_value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我针对之前的架构测试了以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<Measurements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<m_doc>TestDoc</m_doc>
<m_parameters>
<!-- First group -->
<m_name>Length</m_name>
<m_isEngValue>false</m_isEngValue>
<m_unit></m_unit>
<m_radix>HEXADECIMAL</m_radix>
<m_value>0</m_value>
<!-- Second group -->
<m_name>Height</m_name>
<m_isEngValue>false</m_isEngValue>
<m_unit></m_unit>
<m_radix>DECIMAL</m_radix>
<m_value>0</m_value>
</m_parameters>
</Measurements>
出现此错误:
Cvc-complex-type.2.4.d:找到无效的内容 元素'm_name'。在这一点上没有预期的儿童元素。,线 '13',列'15'。
此错误是关于构成参数的第二组5个元素。如果我删除了第二组,那么我没有错误。
我正在尝试使用在线验证器:www.freeformatter.com
架构是我无法控制的要求。我必须生成XML,它将通过该模式进行验证。
答案 0 :(得分:2)
通常的做法是将每个组包装成一个无限制的元素:
<?xml version="1.0" encoding="UTF-8"?>
<Measurements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<m_doc>TestDoc</m_doc>
<m_parameters>
<!-- First group -->
<m_parameter>
<m_name>Length</m_name>
<m_isEngValue>false</m_isEngValue>
<m_unit></m_unit>
<m_radix>HEXADECIMAL</m_radix>
<m_value>0</m_value>
</m_parameter>
<!-- Second group -->
<m_parameter>
<m_name>Height</m_name>
<m_isEngValue>false</m_isEngValue>
<m_unit></m_unit>
<m_radix>DECIMAL</m_radix>
<m_value>0</m_value>
</m_parameter>
</m_parameters>
</Measurements>
表示架构:
<xs:element name="m_parameters">
<xs:complexType>
<xs:sequence>
<xs:element name="m_parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="m_name" type="xs:string"/>
<xs:element name="m_isEngValue" type="xs:boolean"/>
<xs:element name="m_unit" type="xs:string"/>
<xs:element name="m_radix" type="xs:string"/>
<xs:element name="m_value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
如果您无法控制架构,我担心重复是不可能的,因为minOccurs
和maxOccurs
默认值为1。