2009-09-22 64 views
3

我想创建一个xml架构(xsd)来验证xmlfile。<any>在XSD中不起作用?

<a> 
    <b> 
     <c>...</c> 
     <d>...</d> 
    </b> 
    <b> 
     <c>...</c> 
     <e>...</e> 
      <d>...</d> 
    </b> 
<a> 

1个元素。 多个B元素,有一些内容。

我想验证a存在于文件中,以及b的一个或多个出现。我不知道b里面有什么。

所以这是我的尝试:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="a"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="b" minOccurs="1" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="b"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:any minOccurs="1"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

我希望any - 元素会做的魔术,但事实并非如此。我究竟做错了什么?

编辑: XmlSpy给我这个错误:元素'c'没有在DTD/Schema中定义。

回答

2

你不需要架构中的额外“B”,我想你要找的东西是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="a"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="b" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:any maxOccurs="unbounded" minOccurs="1" processContents="lax"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

这说明你有<a>为根节点,它可以包含一个或多个<b> s

编辑:对不起,没有阅读完整的问题 - 尝试以上!

第二编辑:上面的另一个尝试!

+0

不幸的不是。 XmlSpy给了我这个错误:元素'c'没有在DTD/Schema中定义。编辑后的 – Natrium 2009-09-22 08:53:26

+0

:仍然是同样的错误:XmlSpy给我这个错误:元素'c'没有在DTD/Schema中定义。 +1虽然努力。 – Natrium 2009-09-22 09:01:33

+0

很确定上面的工作现在:) – 2009-09-22 09:30:09

2

不像第一次出现那样自由自在。默认情况下,我相信,元素的内容必须符合模式,只不过它们可以是来自该模式的任何

如果你想在该模式中不存在的元素,你需要将它定义为这样:

<xs:any minOccurs="1" processContents="lax"/> 

您可以使用“跳过”,而不是“宽松”,这甚至限制较少。

查看W3C spec了解更多信息。

+0

XmlSpy给我这个错误:元素'c'没有在DTD/Schema中定义。两者都有松懈和跳跃。 – Natrium 2009-09-22 09:05:33

+0

XmlSpy并不总是对的。这是越野车。 – skaffman 2009-09-22 09:17:10