【问题标题】:Validation of Weird XML Structure奇怪的 XML 结构的验证
【发布时间】:2014-04-08 12:33:22
【问题描述】:

我需要验证一个非常奇怪的 XML 结构。同时,我必须承认,出于政治原因,我不得对其结构进行任何修改。

我已经通过定义一个过于复杂的 Schema 来验证其中的大部分内容。然而,XML 的某些部分似乎几乎不可能使用 XSD 进行验证。这是有问题的sn-p:

<booktitles>
    <author>Some Author</author>
    <title>Title 1</title>
    <year>1666</year>
    <title>Title 2</title>
    <year>1919</year>
</booktitles>

所以每个 booktitles 条目正好包含 1 个 author 和可变数量的 title - year 对。

因此,如果不修改 XML 结构(是的,我确实意识到这听起来多么愚蠢),是否可以定义一个 XSD 来验证/执行它?

PS:我也有可能使用 JaxB 进行验证。

【问题讨论】:

  • “它不是有效的 XML”。为什么?这对我来说似乎有效。混合元素是合法的。
  • @LutzHorn 你是对的。删除了我的错误陈述
  • 没有什么奇怪的,也没有什么无效的。这只是糟糕的 XML 样式:重复的元素或组应该放在“容器”元素中。验证它的 WXS 模式与 DTD 或 RNG 一样简单。

标签: java xml jaxb xsd-validation


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2017-07-20
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多