我有一个使用旧版本的 XML 规范 (http://www.w3.org/1999/XMLSchema) 构建的 XML 模式。我正在尝试使用架构解析 XML 消息(如下所示)。默认情况下,Xerces 1.1 解析器在应用程序域根目录中查找模式。我正在尝试将架构移动到我们网络目录中的公共位置。似乎我无法使用 Xerces 1.1 库在我的解析程序中将 URL 指定为模式位置。
所以我尝试升级我的程序以使用 JAXP DocumentBuilderFactory 及其 setSchema() 方法。这似乎找到了具有我提供的架构 URL 的架构,除了它给出了解析错误,因为架构(大概)不符合规范的更高版本(例如,我收到错误,因为我的 Ticket 元素不将其成员包装在 xs:Sequence 中)。
我无法升级我的架构,因为目前我无法强制外部客户重写他们向我们发送消息的应用程序。
谁能告诉我如何使用 JAXP 成功地解析/验证使用老式版本的模式规范?或者,有没有办法告诉 Xerces 1.1 DOMParser 使用由 URL(不是文件位置)定义的模式?
这是架构的示例:
<?xml version="1.0" encoding="UTF-8" ?>
<schema>
<element name="Ticket">
<complexType>
<element ref="ID" />
<element ref="User" />
</complexType>
</element>
<element name="ID" type='string' />
<element name="UserID" type='string' />
</schema>
XML 文档如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Ticket xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='TicketSubmission.xsd'>
<ID>2010:December2:Dec:12:05:33:245</ID>
<UserID>user123</UserID>
</Ticket>
谢谢!