【发布时间】: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