验证奇怪的XML结构

时间:2014-04-08 12:33:23

标签: java xml jaxb xsd-validation

我需要验证一个奇怪的奇怪的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进行验证。

1 个答案:

答案 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)
            >