我有一个包含超过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")
答案 0 :(得分:0)
如果使用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
处理,因此您的代码就在哪里。