Ошибка при добавлении элементов из одного файла XML в новый файл XML - PullRequest
0 голосов
/ 09 марта 2011

Привет,

Сейчас я прохожу проект, касающийся манипуляций с 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);
               }
}
}

выходной файл стирается один ..

<?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 ]

2 голосов
/ 09 марта 2011

Проблема здесь:

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

child - это ссылка на элемент body исходного XML-документа. Его родитель myhtml Вы не можете добавить это как дочерний элемент другого нового элемента таким образом.

Вам необходимо создать новый элемент для нового XML-документа. Я предлагаю вам изучить "Ссылка" на Java.

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

Вы должны клонировать и отсоединить дочерний элемент от его родительского элемента перед добавлением его к новому родительскому элементу:

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