Bean-IO、XML Doctype 和 XSD 有问题

Trouble with Bean-IO, XML Doctype, and XSD

我正在使用名为 '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,或者我是这么想的,但我不确定这里的问题是什么。

天哪,我觉得可笑吗?因此,使用 DTD 进行格式化的方法是使用文档类型声明指定的。在我的示例中,我实际上使用 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">

我希望我能帮助其他人不要看起来很傻。谢谢!