我需要验证一个奇怪的奇怪的XML结构。与此同时,我必须承认,出于政治原因,我不得修改任何有关其结构的内容。
我设法通过定义一个过时的复杂模式来验证大部分模式。但是,使用XSD验证XML的某些部分几乎是不可能的。这是有问题的片段:
<booktitles>
<author>Some Author</author>
<title>Title 1</title>
<year>1666</year>
<title>Title 2</title>
<year>1919</year>
</booktitles>
所以每个 booktitles 条目都包含1个作者和可变数量的标题 - 年对。< / p>
因此,如果不修改XML结构(是的,我确实意识到这听起来多么愚蠢)是否可以定义一个可以验证/执行它的XSD?
PS:我也有可能使用JaxB进行验证。
答案 0 :(得分:3)
试试这个:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="booktitles">
<xs:complexType>
<xs:sequence>
<xs:element ref="author"/>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="title"/>
<xs:element ref="year"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="author" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="year" type="xs:string"/>
</xs:schema>
由trang提供,来自此
<!ELEMENT booktitles
(author, (title, year)+)
>
<!ELEMENT author
(#PCDATA)
>
<!ELEMENT title
(#PCDATA)
>
<!ELEMENT year
(#PCDATA)
>