如何知道孩子属于他们的父母?

时间:2016-01-17 21:22:22

标签: java xml

我有一个包含超过12k标签的XML文件。 所有标签都有tagId,如:

<first_tag>                   tagId = 1
   <second_tag_first_child>   tagId = 2

等等,等等。

除了tagId,他们都需要有一个parentId,所以孩子知道他们属于哪个父母。

<root_tag>                               parentId = 0 | tagId = 1
  <first_tag>                            parentId = 1 | tagId = 2
     <second_tag_first_child>            parentId = 2 | tagId = 3
     <third_tag_second_child>            parentId = 2 | tagId = 4
        <fourth_tag_first_grandchild>    parentId = 4 | tagId = 5
  <fifth_tag>                            parentId = 1 | tagId = 6

有谁知道如何制作逻辑以便我可以获得parentId? 我需要的是System.out.println(tag + parentId + tagId + "\n")

2 个答案:

答案 0 :(得分:0)

哇,这是一个糟糕的XML文件。你确定这真的是一个很好的代表文件。

如果使用SAX解析器,一种解决方案是保留一堆正在解析的对象。您可以保持指向堆栈顶部项目的指针,然后当您遇到时,可以弹出堆栈并将topOfStack指向堆栈顶部。

然后你必须自己解析角色(如果那真的是文件的作用),这涉及到实施:

@Override
public void characters(char[] ch, int start, int length) throws SAXException   
{
}

但是你需要缓存进来的字符串,然后在开始处理下一个startElement()或endElement()之前处理它们。是的,这是一种痛苦,这是你的XML文件是一个坏主意的一个原因。 (但也许你没有选择。)

答案 1 :(得分:0)

您有一个XML文件,并且您希望使用Java程序读取它。您可以通过地狱编写自己的程序来读取XML文件,也可以使用现有的软件包,例如SAX库。

要使用SAX-parser,请使用以下import语句:

PATH

您必须从SAXParserFactory创建SAX解析器。工厂本身是使用静态工厂方法创建的。

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

使用SAXParserFactory f = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); 读取XML文件并将输出提供给parser。所有内容都由DefaultHandler处理,因此您的代码就在哪里。

Documentation of DefaultHandler

相关问题