将元素从一个xml文件添加到新的xml文件时出错

时间:2011-03-09 07:24:03

标签: java xml jdom

HI,

现在我正在进行一个关于xml操作的项目。我想将数据从一个xml文件重写到另一个文件。我已经把我的编码和错误显示在控制台中了。由于我是这个项目的新手,我不知道这个概念是否写入。有人能帮我理解这个问题吗?

非常感谢任何指示......

编码:

import java.io.StringReader;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class Test3 {
    static Document profile = new Document();
    static Element html     = new Element("html");

    public static void main(String[] args) throws JDOMException {
        try{
            profile.setRootElement(html);
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><myhtml> <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></myhtml>";
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(new StringReader(xml));
        listChildrenOrg(doc.getRootElement(), 0);
}
        catch(Exception e){
            e.printStackTrace();
        }
    }

     private static void listChildrenOrg(Element root, int depth) {
        System.out.println(root.getName());
        List children = root.getChildren();
        System.out.println(children.size());
        Iterator iterator = children.iterator();
        while (iterator.hasNext()) {
             Element child = (Element) iterator.next();
             System.out.println(child);
             body.addContent(((Element)child.clone()).detach());
             listChildrenOrg(child, depth+1);
               }
}
}
输出文件是blured one ..

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>First Try</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">h1 { text-align: center; } div.centered {text-align: center;} div.centered table {margin: 0 auto; text-align: left;}
</style>
</head>
<body>
<h1 align="center">Body part</h1>
<hr />
</body>
<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><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>

<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>
<tr><td><strong>Name: </strong></td> 

<td>A</td> </tr>
<td><strong>Name: </strong></td>
<strong>Name: </strong>
<td>A</td>
<tr> <td><strong>Age: </strong></td> 
<td>23</td> 
<td>programmer</td></tr>
<td><strong>Age: </strong></td>

<strong>Age: </strong>
<td>23</td><td>programmer</td>
<tr><td><strong>Email: </strong></td><td>adfg@gmail.com</td></tr>
<td><strong>Email: </strong></td><strong>Email: </strong>
<td>adfg@gmail.com</td><hr />
</html>

2 个答案:

答案 0 :(得分:2)

问题在于:

Element child = (Element) iterator.next();
System.out.println(child);
html.addContent(child);

child 引用指向原始xml文档的body元素。其父母是myhtml 您不能以这种方式将其添加为另一个新元素的子元素。

您需要为新的xml文档创建一个新元素。我建议你在Java中学习“参考”。

答案 1 :(得分:0)

在将子元素添加到新父元素之前,必须将子元素从其父元素中克隆并分离:

html.addContent(((Element)child.clone()).detach());