English 中文(简体)
我如何在 Java 中解析 DTD 文件, 一次一行, 没有任何验证?
原标题:How do I just parse a DTD file in Java, one line at the a time and without any validation

我得到了一个无效的 DTD 文件, 它含有重复元素, 而元素不完全相同 :

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

我需要写一个工具,读DTD 并合并以下元素:

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

我似乎无法找到一个 Java 图书馆, 让我可以一次解析一个元素(如SAX)。

我真正想要的是读取 进入一个数据结构, 如阵列地图或类似的东西 。

任何指示都会非常感激

问题回答

在我看来,你必须立刻阅读所有的 DTD ELEMT元素, 或者你可以把它们配对,就像你的例子一样。

因为 DTD 描述可以任意嵌套(...) 常规表达式在理论上无法帮助您。 实际上,大多数 DTD ELENTS 都只有一至两层(...), 所以它们可能有效 。 如果您的问题大致上看起来像你已经显示的一样, 您可以只用字符串黑客和手修补其余部分来做到这一点 。 ( 读单行不会剪断它; ELENT 描述可以跨行, 以“... & gt; ” 结束, 您必须找到这一点 ) 。

If you want a reliable automated approach, you need what amounts to a a program transformation system. DTD s are a particular type of formal system; you need a tool that can read instances of the formal description, give you access to read and update the data structures that represent the instance (typically calls Abstract Syntax Trees), and rewrite the results back out as valid source text.

Not in Java, but our DMS Software Reengineering Toolkit is such a program transformation engine. It has an XML front end that is capable of parsing DTDs, and in fact we ve build code generators using those DTDs.





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签