0

我必须使用 JDOM 解析 XML 文件并从他的所有元素中获取一些信息。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element1>something</element1>
    <element2>
        <subelement21>moo</subelement21>
        <subelement22>
            <subelement221>toto</subelement221>
            <subelement222>tata</subelement222>
        </subelement22>
    </element2>
</root> 

因此,对于 element1 来说,这很容易。但是对于element2,我必须通过他的孩子,如果孩子们有孩子,也要通过他们等等。

public static void getInfos(Vector<String> files) {     
    Document document = null;
    Element root = null;

    SAXBuilder sxb = new SAXBuilder();

    for (int i =0 ; i< files.size() ; i++)
    {
        System.out.println("n°" + i + " : " + files.elementAt(i));
        try
        {
            document = sxb.build(files.elementAt(i));
            root = document.getRootElement();

            List<?> listElements = root.getChildren();
            Iterator<?> it = listElements.iterator();

            while(it.hasNext())
            {
                Element courant = (Element)it.next();
                System.out.println(courant.getName());

                if(courant.getChildren().size() > 0)
                {
                    // here is the problem -> the element has a children
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }   
    }
}

在这种情况下,您有什么建议,例如递归调用或其他什么,以便我可以使用相同的功能。

谢谢。

4

2 回答 2

1

我会使用 SAX。我会在 contenthandler 中保留一个堆栈,用于跟踪我在文档中的当前路径,并保留我的 characters 方法附加到的缓冲区。在 endElement 中,我会从缓冲区中获取内容并将其清除,然后使用当前路径来决定如何处理它。

(这是假设该文档没有混合内容。)

这是一篇关于使用 SAX 处理复杂 XML 文档的文章的链接,它将我简要描述的内容扩展为一种处理递归数据结构的方法。(它还有一篇前身文章是对 SAX 的介绍。)

于 2011-08-16T15:26:50.633 回答
0

您可以考虑使用XPath来获取所需的确切元素。这里的示例使用名称空间,但基本思想仍然成立。

于 2011-08-16T15:56:02.313 回答