Java 如何从XML文档中删除/删除DOCTYPE声明?
如何在JAVA中使用DOM解析器或SAX解析器从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
谢谢这似乎是你想要的:
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都无法完成。您永远无法真正控制他们编写输出的方式(因为这不重要)。