我正在尝试创建一个xml-schema(xsd)来验证xmlfile。
<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中定义。
答案 0 :(得分: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
编辑:抱歉,没有阅读完整的问题 - 请尝试以上操作!
第二次修改:上面的另一次尝试!
答案 1 :(得分:2)
并不像第一次出现那样自由自在。默认情况下,我相信,元素的内容仍然必须符合架构,只是它们可以是来自的架构。
如果您希望架构中不存在元素,则需要将其定义为:
<xs:any minOccurs="1" processContents="lax"/>
你可以使用“skip”而不是“lax”,这样的限制性更小。
有关详细信息,请参阅W3C spec。