我需要使用SAX Parser解析嵌套的XML。
<ParentNode id="3" name="3" >
<ChildNode>
<InnerNode id="13" name="13" parentID="3" />
</ChildNode>
<ChildNode>
<ParentNode id="2" name="2" >
<ChildNode>
<ParentNode id="1" name="1" >
<ChildNode>
<InnerNode id="11" name="11" parentID="1" />
</ChildNode>
<ChildNode>
<InnerNode id="10" name="10" parentID="1" />
</ChildNode>
</ParentNode>
</ChildNode>
<ChildNode>
<InnerNode id="12" name="12" parentID="2" />
</ChildNode>
</ParentNode>
</ChildNode>
</ParentNode>
ParentNode标记是此处的主标记。 ParentNode也可以在ChildNode标记内。 这里是ParentNode和ChildNode之间的onyToMany关系。 和hibernate域中的ChildNode和InnerNode之间的oneToOne关系。
这不是静态XML。它可以更嵌套。
答案 0 :(得分:1)
如果您想要使用SAX解析器,需要考虑的设计模式是定义一个对象堆栈(例如Stack objectStack = new Stack())。将相应的对象推入startElement中的堆栈。在endElement中将对象从堆栈中弹出。当您想要知道包含(父)对象时,请查看堆栈顶部。 (例如,在startElement中,如果你查看堆栈的顶部并且那里有一个对象,它就是当前元素定义的对象的父对象。)
答案 1 :(得分:0)
这应该有帮助
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
System.out.println("End Element :" + qName);
}
saxParser.parse("yourfile.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}