1

我需要使用 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。以及休眠域中 ChildNode 和 InnerNode 之间的 oneToOne 关系。

这不是静态 XML。它可以嵌套更多。

4

2 回答 2

2

如果要使用 SAX 解析器,需要考虑的设计模式是定义对象堆栈(例如 Stack objectStack = new Stack())。在 startElement 中将对应的对象压入栈中。在 endElement 中将对象从堆栈中弹出。当您想知道包含(父)对象时,请查看堆栈顶部。(例如在 startElement 中,如果您查看堆栈顶部并且那里有一个对象,则它是当前元素定义的对象的父级。)

于 2016-07-15T16:09:08.210 回答
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();
     }

   }
于 2013-02-08T11:01:56.593 回答