0

我正在使用一个名为“beanio”的工具包来解析 Java 中的固定长度平面文件。使用该工具包,我需要使用 XML 文档定义文件格式。我可以参考 beanio 网站上的架构位置,但我更愿意使用本地副本。原因是我想确保万一网站发生任何事情,我将有一个工作程序。

我的问题是,当我尝试在本地引用 xsd 文件时,SAX 引擎会引发有关格式错误的 xml / 定义的错误。以下将起作用:

<beanio xmlns="http://www.beanio.org/2012/03" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

但是,以下内容不会:

<!DOCTYPE beanio SYSTEM "resources/formatting/mapping.xsd">
<beanio>

这些文件,mapping.xsd,无论是在本地还是在 Internet 上引用,都是完全相同的

抛出的错误如下:

Caused by: org.xml.sax.SAXParseException; systemId: file:///C:/workspace/LookupsFileProcessor/resources/formatting/mapping.xsd; lineNumber: 2; columnNumber: 2; The markup declarations contained or pointed to by the document type declaration must be well-formed.

这非常令人沮丧。用于 java 的平面文件解析的工具包非常陈旧且过时。我已经尝试了其中的四个,其中一些要么没有可用的 API,要么它们依赖于外部 DTD/XSD 定义,这导致我遇到了同样的问题。

我对 XML 的理解足够好,至少我是这么想的,但我不确定这里有什么问题。

4

1 回答 1

0

好吧,男孩,我觉得很荒谬。因此,使用 DTD 格式化的方法是使用 doctype 声明指定的。在我的示例中,我实际上使用 XSD 进行 XML 格式化,这是一种与DTD不同的技术。

使用 XML Schema 方法指定本地 XSD 文件的正确方法如下:

<beanio xmlns="http://www.beanio.org/2012/03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.beanio.org/2012/03 resources/formatting/mapping.xsd">

我希望我可以帮助其他人看起来很愚蠢。谢谢!

于 2016-04-29T22:27:09.883 回答