Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从XML文档中删除/删除DOCTYPE声明?_Java_Xml_Dom_Sax_Jaxp - Fatal编程技术网

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

Java 如何从XML文档中删除/删除DOCTYPE声明?,java,xml,dom,sax,jaxp,Java,Xml,Dom,Sax,Jaxp,如何在JAVA中使用DOM解析器或SAX解析器从XML文档中删除DOCTYPE声明 如果你想知道的东西丢失了。在你的评论中提到它 谢谢这似乎是你想要的: try { XMLInputFactory inFactory = XMLInputFactory.newFactory(); XMLOutputFactory outFactory = XMLOutputFactory.newFactory(); XMLEventReader input = inFactory.cr

如何在JAVA中使用DOM解析器或SAX解析器从XML文档中删除DOCTYPE声明

如果你想知道的东西丢失了。在你的评论中提到它


谢谢

这似乎是你想要的:

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()”
code
XMLInputFactory inFactory=XMLInputFactory.newFactory();XMLOutputFactory outFactory=XMLOutputFactory.newFactory()
code
无论如何,过滤器不起作用:-/好吧,javadoc说“为了保持API的一致性,这个方法已经被弃用了。所有的newInstance方法都被相应的newFactory方法替换了。”所以我使用了newFactory()。过滤器在我尝试的随机xml文件上运行良好。。。你是说你有一个输出DTD的输入文件?我对这个API(StAX)完全陌生,我有点怀疑。是否不需要实例化XMLEventFactory?我只想从xml文档中删除这一行
code
code
此代码确实删除了DTD。但是该文件由XML序列化程序重新格式化,这可能是您不喜欢的。如果您只想删除DTD行而不做任何其他更改,我认为使用任何XMLAPI都无法完成。您永远无法真正控制他们编写输出的方式(因为这不重要)。