以下是我对您的问题的回答:
有哪些解析选项?我可以轻松实现/插入自己的解析器吗?
JAXB ( JSR-222 ) 实现可以从许多不同的输入类型中解组: InputStream
、InputSource',
Node ,
XMLStreamReader ,
XMLEventReader ,
File ,
Source`。如果您的 XML 表示与其中任何一个匹配,那么您就完成了。
有效性呢?假设我有一个放松的解析器,它在模式方面有点放松。我仍然可以创建(无效的)对象结构吗?
JAXB 实现要求 XML 格式正确,但不要求它对 XML 模式有效。它旨在处理各种文件。如果您想确保“有效性”,那么您可以设置 XML 模式(请参阅JAXB 和 Marshal/Unmarshal Schema Validation)。
JAXB 是否提供了特殊的方法来对对象进行例如验证?我想解析一个“无效”的对象结构,有一些算法修复它,然后验证(在 Java 中)。
您可以使用javax.xml.validation
API 对对象模型进行验证。有关完整示例,请参见:
JAXB 是否提供其他方法来对对象做一些花哨的事情(例如访问者模式)。
JAXB 模型是 POJO,因此您可以根据需要设计它们。您可能对以下课程感兴趣:
内存占用怎么办?对象表示(不考虑解析)对于 10-100MB 的 XML 文件是否可行?
是的,JAXB 可用于处理该大小的文档。如果您担心大小,可以使用 anXMLStreamReader
来解析 XML 文件,然后从XMLStreamReader
in 块中解组对象。