在java中使用SAXParser解析嵌套XML

时间:2013-02-08 10:58:28

标签: java saxparser

我需要使用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。它可以更嵌套。

2 个答案:

答案 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();
     }

   }