【问题标题】:Xerxes/SAX2 reports wrong elementXerxes/SAX2 报告错误的元素
【发布时间】:2016-09-04 09:30:42
【问题描述】:

我为今年的 Festivus 表达不满而写下的一件事是 Xerces/SAX2 如何报告解析错误。

拿这点 XSD:

<xs:sequence>
    <xs:element ref="element1" />
    <xs:element ref="element2" />
    <xs:element ref="element3" />
    <xs:element ref="element4"     minOccurs="0" />
    <xs:element ref="element5" />
    <xs:element ref="element6"  minOccurs="1" />
    <xs:element ref="element7"       minOccurs="0" />
    <xs:element ref="element8" minOccurs="0" />
    <xs:choice minOccurs="0">
        <xs:element ref="choiceElement1" />
        <xs:element ref="choiceElement2" />
    </xs:choice>
    <xs:element ref="element9" minOccurs="0" />
</xs:sequence>

和示例 XML

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xmldocument xmlns="http://www.somewebsite.com/xsd/xmldocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.somewebsite.com/xsd/xmldocument xmldocument.xsd">

  <transaction msgId="MESSAGE-ID">
    <element1>KS0003</element1>
    <element2>2016-05-09</element2>
    <element3>10:20:50</element3>
    <element5>99433</element5>
    <element8>jesse</element8>
  </transaction>

</xmldocument>

我收到此错误:

RAW SAX2 错误:文件“/tmp/QACXV0Z346”错误,行=10,列=17, XML element=element8,元素“element8”对内容无效 模型: '((元素1,元素2,元素3,元素4,元素5,元素6,元素7,元素8,(选择元素1|选择元素1)),元素9)'

在我看来,这里的问题不是element8,而是element6,它设置为必需,但实际上是XML 中缺少的。

我有一些代码试图解析这个字符串并找出真正的问题是什么,但错误字符串不包含任何关于可选元素等的信息。我可能没有正确设置 - 也许。我一般对 SAXException 有一个问题 - 它几乎没用 - 所以我需要的是来自 something 的更多信息,它告诉我真正的问题是什么。

我们使用 Xerces 2.6 或 2.8,因为我们在 IBM i 上运行,除非您升级操作系统,否则它们不会提供此类更新。

【问题讨论】:

    标签: xsd xml-parsing saxparser xerces


    【解决方案1】:

    Xerces 错误消息实际上相当不错。

    您可能会争辩说,在这种特殊情况下,最好按照

    遇到了element8,但应该是element6。

    这对于这个简单的情况很好,但请注意,在一般情况下,可以有一个任意复杂的表达式,涵盖可能预期的内容。准备好引入一大堆复杂性,以简明扼要地解释在解析出错的给定点上允许的所有内容。引用第一个矛盾点以及违反的父内容模型要求通常是一个不错的诊断。

    【讨论】:

      猜你喜欢
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多