Как я могу автоматизировать синтаксический анализ XML с помощью JDOM - PullRequest
0 голосов
/ 16 августа 2011

Мне нужно проанализировать XML-файл с использованием JDOM и получить информацию из всех его элементов.

<?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 это легко.Но для элемента2 я должен пройти через его детей, и если у детей есть дети, пройти через них тоже и т. Д.

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

Что вы предлагаете в этом случае, например, рекурсивный вызов или что-то еще такЯ могу использовать ту же функцию.

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Я бы использовал SAX.Я бы держал в обработчике содержимого стек, который отслеживал мой текущий путь в документе, и сохранял буфер, к которому добавлялся мой метод символов.В endElement я получал содержимое из буфера и очищал его, а затем использовал текущий путь, чтобы решить, что с ним делать.

(предполагается, что в этом документе нет смешанного содержимого.)

Вот ссылка на статью об использовании SAX для обработки сложных XML-документов , которая расширяет то, что я кратко описал, в подходе, который обрабатывает рекурсивные структуры данных.(В нем также есть статья-предшественник, введение в SAX .)

0 голосов
/ 16 августа 2011

Вы можете использовать XPath , чтобы получить именно те элементы, которые вам нужны. В примере здесь используются пространства имен, но основная идея верна.

...