从SAX java XML解析器中,我如何知道“DOCTYPE”关键字的大小写?

时间:2012-04-25 11:37:09

标签: java xml xml-parsing sax

我正在使用Java SAX解析器(org.xml.sax.ext.DefaultHandler2的实现)来解析XML文档,并且此文档具有指向DTD的DOCTYPE声明。出于一些奇怪的原因,我需要知道在原始文档中写入“doctype”关键字本身的情况,以便我可以使用完全相同的情况输出文档。

这是,我需要能够区分:

<!DOCTYPE thing SYSTEMID ...>

...从:

<!doctype thing SYSTEMID ...>

有没有办法从解析器本身实现? (我的意思是,在执行解析器之前没有求助于读取流的前n个字节)

由于

2 个答案:

答案 0 :(得分:3)

如果输入是XML,则DOCTYPE为大写。相反,如果DOCTYPE是小写的,那么输入不是XML。因此,如果SAX解析器成功通过DOCTYPE声明,则您知道它是大写的。

答案 1 :(得分:2)

最后,似乎没有办法让java XML解析器告诉你DOCTYPE子句的原始情况,因为它会认为它始终是大写的(这是XML规范所说的,但是如果您尝试使用此类XML解析器来解析HTML5,则可能不是真的。

我解决这个问题的方法是实现我自己的java.io.Reader,它允许我读取文件的字节并确定DOCTYPE子句的原始情况,然后在XML SAX解析器中使用此Reader。解析完成后,我会问读者对象该子句的情况是什么,我会得到正确的答案。

它既凌乱又丑陋,但......似乎是唯一真正的选择。