2010-12-08 38 views
0

我有以下XML:XSD与所需的元素和未知的元素

<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

下面是一个例子架构,将验证对两个示例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> 

希望帮助!

+1

但所有元素都不接受由于未知元素而需要的任何元素。 – jeslas 2010-12-08 13:48:51