Ошибка при получении дочерних тегов body из xml с использованием jdom - PullRequest
0 голосов
/ 07 марта 2011

Мне нужно пройтись по дереву JDOM и извлечь все данные из раздела body, чтобы использовать их при создании другого XML-документа. Я очень новичок в программировании. Я приложил свою концепцию и ошибку, показанную в консоли. Я хочу уточнить, является ли эта концепция правильной или неправильной. Может ли какой-нибудь орган помочь мне узнать об этом и дать направление?

Буду признателен за любые указатели ..

//root- Existing document's root.
//body- New documents body.
private static Element listChildren(Element root, int depth) {
    System.out.println(root.getName());
    List children = root.getChild("body").getChildren();
    Iterator iterator = children.iterator();
    while (iterator.hasNext()) {
         Element child = (Element) iterator.next();
         System.out.println(child.toString());
         body.addContent(child);
         listChildren(child, depth+1);
         return child;
    }

    return null;
}

Отображается ошибка:

Exception in thread "main" java.lang.NullPointerException
    at createXhtml1.listChildren(createXhtml1.java:85)
    at createXhtml1.newXhtml(createXhtml1.java:62)
    at createXhtml1.main(createXhtml1.java:112)

1 Ответ

0 голосов
/ 07 марта 2011

Итак, на основе комментариев ваша проблема с root.getChild("body"). Этот метод возвращает ноль (в корневом элементе нет дочернего тела с именем). Вы должны проверить на null и return null из метода.

....
Element element = root.getChild("body")    
if (element == null)
    return null;
List children = element.getChildren();
...

EDIT Согласно комментарию, вы можете напечатать (или что хотите) все элементы.

public class Test {
    public static void main(String[] args) throws Exception {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><html> <body> <h1 align=\"center\">Profile</h1><hr /> <div class=\"centered\"> <table><tr><td><strong>Name: </strong></td> <td>A</td> </tr> <tr> <td><strong>Age: </strong></td> <td>23</td> <td>programmer</td></tr><tr><td><strong>Email: </strong></td><td>adfg@gmail.com</td></tr></table></div><hr /></body></html>";
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(new StringReader(xml));
        listChildren(doc.getRootElement(), 0);
    }

    private static void listChildren(Element root, int depth) {
        System.out.println(root.getName());
        List<Element> children = root.getChildren();
        if (children == null || children.isEmpty())
                return;
        for (Element child : children) {
                 System.out.println(child.toString());
                 listChildren(child, depth+1);
        }

        return;
    }
}
...