如何从XML文档中删除/移除DOCTYPE声明?

5
如何使用DOM解析器或SAX解析器从XML文档中删除DOCTYPE声明?如果您需要了解的内容有所缺失,请在评论中提及。谢谢!
1个回答

6
这似乎可以满足您的需求:
try {
    XMLInputFactory inFactory = XMLInputFactory.newFactory();
    XMLOutputFactory outFactory = XMLOutputFactory.newFactory();

    XMLEventReader input = inFactory.createXMLEventReader(
            new FileInputStream("test.xml"));
    XMLEventReader filtered = inFactory.createFilteredReader(
            input, new DTDFilter());
    XMLEventWriter output = outFactory.createXMLEventWriter(
            System.out);

    output.add(filtered);
    output.flush();
}
catch (XMLStreamException e) {
    e.printStackTrace();
}
catch (FileNotFoundException e) {
    e.printStackTrace();
}

static class DTDFilter implements EventFilter
{
    @Override
    public boolean accept(XMLEvent event) {
        return event.getEventType() != XMLStreamConstants.DTD;
    }

}

在这些代码行中,应该使用"newInstance"代替"newFactory()"。XMLInputFactory inFactory = XMLInputFactory.newInstance(); XMLOutputFactory outFactory = XMLOutputFactory.newInstance();无论如何,过滤器都不起作用 :-/ - Omkar Deekonda
好的,javadoc说:“为了保持API的一致性,此方法已被弃用。所有newInstance方法都已被相应的newFactory方法替换。”所以我使用了newFactory()。这个过滤器在我尝试的随机xml文件上运行得很好...你的意思是你有一个输入文件,它会输出一个DTD吗? - proactif
我完全是对这个API(StAX)一无所知,我有一个小疑问。是否不需要实例化XMLEventFactory? - Omkar Deekonda
我只想从我的XML文档中删除这一行 code <!DOCTYPE ~~~filepath~~~ > code - Omkar Deekonda
这段代码确实移除了DTD。但是XML序列化器会重新格式化文件,这可能是您不喜欢的原因。如果您只想删除DTD行而不进行其他更改,我认为无法使用任何XML API完成此操作。您永远无法真正控制他们编写输出的方式(因为这并不重要)。 - proactif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接