Java 使用jdom从xml获取正文标记的子项时出错

Java 使用jdom从xml获取正文标记的子项时出错,java,xml,jdom,Java,Xml,Jdom,我需要遍历一个JDOM树并从body部分提取所有数据,以便在另一个xml文档创建中使用它。我对编程很陌生。我已经附上了控制台中显示的概念和错误。我想澄清这个概念是对还是错。有人能帮我了解这件事并给我一个方向吗 如果有任何建议,我将不胜感激 //root- Existing document's root. //body- New documents body. private static Element listChildren(Element root, int depth) { S

我需要遍历一个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)

因此,根据注释,您的问题在于
root.getChild(“body”)
。此方法返回null(根元素中没有名为body的子元素)。您应该检查null并从方法返回null

....
Element element = root.getChild("body")    
if (element == null)
    return null;
List children = element.getChildren();
...
编辑 根据评论,您可以打印(或任何您想做的事情)所有元素

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;
    }
}
公共类测试{
公共静态void main(字符串[]args)引发异常{
String xml=“Profile
姓名:A年龄:23程序员电子邮件:adfg@gmail.com
; SAXBuilder=新SAXBuilder(); documentdoc=builder.build(新的StringReader(xml)); listChildren(doc.getRootElement(),0); } 私有静态void listChildren(元素根,int深度){ System.out.println(root.getName()); List children=root.getChildren(); if(children==null | | children.isEmpty()) 返回; for(元素子元素:子元素){ System.out.println(child.toString()); 列表子项(子项,深度+1); } 返回; } }
请发布整个源代码,或突出显示第85行。谢谢……列出children=root.getChild(“body”).getChildren();但这是我的xml文件。它确实有一个body元素。个人资料
姓名:A年龄:23程序员\电子邮件:adfg@gmail.com
是的,但您在这一行递归调用此方法
listChildren(child,depth+1)。所以你先取一个根,然后它的主体,然后在所有子对象上迭代,然后在每个子对象上再次调用listChildren。所以问题是,比如说,里面并没有body元素。简单地说,里面并没有body元素,
,您希望在第85行得到一个body元素。不管怎样,你的程序到底要做什么?确切地说,我需要现有文档正文中的所有数据,并且必须用这些数据制作另一个文档..耶。。当我按照你的建议修改代码时,我得到了无错误的输出。。但我还是没能得到结果。请看我的输出。。第一个Tryh1{text align:center;}div.centered{text align:center;}div.centered表格{text align:left;}主体部分