2011-03-09 20 views
0

HI,錯誤,同時增加從一個XML文件中的元素以新的XML文件

現在我通過關於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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</td></tr> 
<td><strong>Email: </strong></td><strong>Email: </strong> 
<td>[email protected]</td><hr /> 
</html> 
+0

你也應該發佈XML – 2011-03-09 07:29:15

+0

我加入XML作爲主要功能本身內部的串! ! – Arun 2011-03-09 07:33:10

回答

0

你要克隆並將其添加到新的父之前,從它的父元素分離的孩子:

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

謝謝你的支持。它正在工作,但輸出文件blured.I已添加輸出xml作爲更新question.Could你請通過... – Arun 2011-03-09 15:36:14

+0

嗨,看看你的輸入和輸出。你的遞歸是不必要的。如果你想把一個節點(及其所有內容)作爲一個子節點添加到另一個元素,你只需要做一個addContent(在克隆和分離原始節點之後)。 但是,這是另一種問題;我用我的解決方案回答了您的原始問題,該解決方案可行。然後你編輯了你的問題,現在你的問題看起來非常不同。我認爲這不是正確的做法。祝你有美好的一天。 – javanna 2011-03-10 09:12:20

+0

Hi @ javanna,其實我有一個錯誤。直到這次我正在處理遞歸。這就是爲什麼我認爲它與它有關。現在只有 - 當你說到這一點時 - 我明白了這一點。真的謝謝你@ javanna.That非常友好。祝你有美好的一天。 。 – Arun 2011-03-10 09:36:56

2

問題就在這裏:

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

child參考到原始xml文檔的body元素。它的父母是myhtml 您不能以這種方式將此添加爲另一個新元素的子元素。

您需要爲新的xml文檔創建一個新元素。我建議你學習Java中的「Reference」。

+0

謝謝@Sarwar Erfan ...你能否給我或者提供一些材料來研究它。 – Arun 2011-03-09 08:24:34

+0

http://www.javafaq.nu/java-article436.html – 2011-03-09 09:46:55

+0

謝謝@Sarwar Erfan ..我經歷了你發送的材料。這是非常有用的一個。但我仍然無法解決我的問題。我想從一個XML文件(主體)屬性元素到新的XML文件。現在我使用JDOM解析器。我試過所有的方法,即addContent(),setContent()等。但我無法設法得到輸出。如果你知道這些,你能幫我解決這個問題嗎? – Arun 2011-03-09 12:34:36