我有以下xml:
<product>
<name>beef</name>
<category>food</category>
<unknownfield1>..</unknownfield1>
<unknownfield2>..</unknownfield2>
</product>
我需要验证此xml以确保根元素是产品,并且它包含所需的元素名称和类别。问题在于,它并不像上面的例子那样完全结构化。可能是这样的。
<product>
<category>food</category>
<unknownfield4>..</unknownfield4>
<name>beef</name>
<unknownfield4>..</unknownfield4>
</product>
如果结构没有改变,我可以使用以下内容:
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="category" type="xs:string" />
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"></xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>
但是当元素序列未知时,这显然不起作用。 对此有任何帮助表示赞赏。
答案 0 :(得分:0)
这是一个示例模式,它将针对您提供的两个示例XML文件进行验证:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="unknownfield4"/>
<xs:element name="unknownfield2"/>
<xs:element name="unknownfield1"/>
<xs:element name="product">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="category"/>
<xs:any maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="category"/>
<xs:any/>
<xs:element ref="name"/>
<xs:any/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
<xs:element name="category">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
希望有所帮助!!