2017-02-13 49 views
2

我想写模式这验证我的下面的XML想写架构XML文件

<labtest> 
    <labtest_id1>10190</labtest_id1> 
    <labtest_id2> 10200</labtest_id2> 
    <labtest_id3> 10220</labtest_id3> 
</labtest> 

标签<labtest_id>的数量可以增加或减少。我验证喜欢这一点,但它不工作

<xs:element name="labtest" minOccurs="1" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="labtest_id" minOccurs="1" type="xs:decimal"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
+0

可能重复[此问题](http://stackoverflow.com/questions/943659/how-can-i-define-an-xsd-file-that-allows-unknown-wildcard-elements) –

+0

永远不要告诉我们什么是“不工作”。告诉我们它是如何失败的。 –

+0

它说因为labtest_id 2不存在而失败。所以我想跳过labtest的检查 – amanda

回答

2

更改XML设计迈克尔·凯建议,仍然支持多种labtest元素以及多种labtest_id元素:

此XML,

<?xml version="1.0" encoding="UTF-8"?> 
<labtests> 
    <labtest> 
    <labtest_id>10190</labtest_id> 
    <labtest_id>10200</labtest_id> 
    <labtest_id>10220</labtest_id> 
    </labtest> 
    <labtest> 
    <labtest_id>12345</labtest_id> 
    </labtest> 
</labtests> 

将成功地验证对这一XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="labtests"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="labtest" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="labtest_id" minOccurs="1" 
          maxOccurs="unbounded" type="xs:decimal"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

备注:

  • 你想labtest重复,但只能在良好的XML是一个根元素 ,所以加一个labtests包装元素。
  • 你想labtest_id重复,所以加一个maxOccurs="unbounded"到 其声明。
3

如果要强加LABTEST的所有孩子必须命名为labtest_N其中N是一个整数的约束,这东西你不能XSD做(除也许使用XSD 1.1和断言)。

这是使用XML一个可怕的方式,而要做到的最好的事情是第一次使用XSLT把它转换为理智的东西,例如:

<labtests> 
    <labtest id='1'>10190</labtest> 
    <labtest id='2'>10200</labtest> 
    <labtest id='3'>10220</labtest> 
</labtests> 

,然后验证与XSD的结果。

+0

但labtest标签的数量是不知道的可能会增加,所以这不是解决方案@micheal kay – amanda

+0

@Micheal我怎么能跳过使用跳过检查labtest? – amanda

+0

正是因为labtest标签的数量未知,您最好使用不同的结构。 XSD旨在使用固定的有限标签名称词汇来验证文档。 –