java - SAX 使用多个 DefaultHandler 扩展

标签 java xml xml-parsing sax saxparser

我遇到的问题是我想使用 SAX defaultHandler 类的扩展来解析 1 个 XML 文档。当只使用一个处理程序时,我可以解析出 XML 并将不同的标签分配给对象的属性(请参阅域和区域)。一旦我在域和区域对象中有了这些,我想将它们添加到另一个对象 (GroupedFiles),该对象具有域和区域列表。我遇到的问题是使用 2 个处理程序解析 1 个文档。我的理论(虽然不是最佳编码实践)是两次解析文档,使用域处理程序运行一次,设置域,然后添加到分组文件,然后对区域执行相同的操作。这是代码,

GroupedFiles groupedFiles = new GroupedFiles();
ArrayList<Domain> domains = new ArrayList<Domain>();
ArrayList<Area> areas = new ArrayList<Area>();

//Create parser from factory
XMLReader parser = XMLReaderFactory.createXMLReader();

//Creates an input stream from the file "someFile.xml"
InputStream in = new FileInputStream(new File("someFile.xml"));
InputSource source = new InputSource(in);

//Create handler instances
DomainHandler domainHandler = new DomainHandler();
AreaHandler areaHandler = new AreaHandler();

//Parses out XML from a document using each handler, 
//adding it to an object with the correct properties then adds those
//to another object which features Lists of Domains, Areas, and Directories.
parser.setContentHandler(domainHandler);
parser.parse(source);
domains = domainHandler.getXML();
groupedFiles.setDomain(domains);

parser.setContentHandler(areaHandler);
parser.parse(source);
areas = areaHandler.getXML();
groupedFiles.setArea(areas);

但是我做不到,它似乎在第二个 parser.parse(source) 上挂断了。如果我在运行域后查看 groupedFiles,则会填充域,但不会填充区域。有什么建议吗?

最佳答案

您不需要进行多次传递,您可以在解析过程中交换内容处理程序。 XMLReader 有一个 setContentHandler 方法,您可以调用该方法以传入新的处理程序。例如,如果在 startElement 中识别出一个标记开始一个由不同的处理程序覆盖的区域,或者如果您将元素留在 endElement 并想切换回以前的内容处理程序。

有关示例,请参阅此 JavaWorld article或查看 this answer .

关于java - SAX 使用多个 DefaultHandler 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812815/

相关文章:

java - Google speech to Text api in android status code UNIMPLEMENTED 错误

仅采用从父类(super class)继承的对象的 Java 方法

python - python解析XML并删除容器

javascript - 使用 Jquery 和 Javascript 解析 xml

xml - 在 PostgreSQL 中提取 xml 标签的值

java - 无法为标签 :yaml. org,2002 构造 java 对象

java - OpenSocial、Facebook 平台和其他用于 Java 控制台应用程序的 API

java - 使用 Lucene 索引单个 Xml 文件

c# - XML反序列化得到空值

java - java中如何解析标签