1

我收到了一个无效的 DTD 文件,其中包含重复的元素并且元素不相同:

<!ELEMENT Data (Name, address?)>
<!ELEMENT Data (Name, age)>

我需要编写一个实用程序来读取 DTD 并合并如下元素:

<!ELEMENT Data (Name, address?, age)>

我似乎无法找到一个 java 库,它允许我一次只解析一个元素(如 SAX)。

我真正想要的是读<!ELEMENT Data (Name, address?)>入一个数据结构,比如数组映射或类似的东西。

任何指针将不胜感激。

4

1 回答 1

1

在我看来,您必须一次阅读所有 DTD 元素,否则您无法将它们配对,如您在示例中所示。

因为 DTD 描述可以有 (...) 正则表达式的任意嵌套,理论上无法帮助您。实际上,大多数 DTD 元素只有一层或两层 (...),因此它们可能会起作用。如果您的问题很大程度上看起来像您已经展示的那样,您可以通过字符串黑客来完成此操作并手动修复其余部分。(阅读单行不会削减它;ELEMENT 描述可以跨越多行并以“...>”结尾,您必须找到它)。

如果您想要一种可靠的自动化方法,您需要一个程序转换系统。DTD 是一种特殊的形式系统。您需要一个可以读取正式描述实例的工具,让您可以读取和更新表示实例的数据结构(通常称为抽象语法树),并将结果重写为有效的源文本。

不是在 Java 中,但我们的DMS Software Reengineering Toolkit就是这样一个程序转换引擎。它有一个能够解析 DTD 的 XML 前端,事实上我们已经使用这些 DTD 构建了代码生成器。

于 2012-05-28T05:52:31.600 回答