2016-10-04 56 views
0

是否有可能刪除xml文件的根元素? 我怎樣才能在Java中做到這一點? 我的XML文件是這樣的:如何從xml文檔中刪除根元素?

<root> 
<body> 
.... 
</body> 
</root> 

我已經試着用SAX來分析它,並確定我實現這一點,但我發現SAX不允許編寫代碼,XML文件(我讀的是真的很難)。 你有什麼想法如何從根標籤獲取內容並將其寫入以body爲父項的新文檔?

+0

SAX是非常低級的。您應該使用DOM來代替。首先閱讀[DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html),然後按照指向DocumentBuilder和Document的鏈接。 – VGR

+0

[如何用DOM刪除XML文檔的根節點]可能的副本(http://stackoverflow.com/questions/4198967/how-to-remove-the-root-node-of-an-xml-document -with-dom) –

回答

-1

如果需要剝離<root></root>標籤不需要解析使用SAX等XML文件就分析它的字符串和空字符串替換標籤。

一個非常非常簡單的例子可能是:

String str = "<root><body></body></root>"; 

    String str2 = str.replace("<root>", "").replace("</root>", ""); 
    System.out.println(str2); 
+2

當我在一個語句中看到帶有正則表達式的XML或HTML時,我總是指[this](http://stackoverflow.com/a/1732454/5091346)答案。 –

+2

@AndriiAbramov從技術上講,這段代碼沒有使用正則表達式,但它仍然使用盲字符串替換,這對於XML和HTML來說是一個非常糟糕的想法,同樣的原因正則表達式是一個非常糟糕的主意。 – VGR

+1

感謝您指出我的答案是錯誤的,但是由於沒有使用正則表達式,請詳細說明爲什麼剝離「」和「」標籤是錯誤的,因爲根據我的理解,OP沒有被要求用xml來做任何奇特的事情解析。在我的回答中,我強調這是代碼的一個非常基本的樣本,可能是做OP的工作。而且不需要倒退,只需發佈​​正確的答案。 – pleft

0

一個爲您解決問題的方法是使用解析可以在GitHub上的Scilca XML Progession包記錄。您可以獲取子元素的結構,然後保存它。

import org.scilca.sxp.*; 

XMLConnection xc = new XMLConnection("@filepath"); 
List<Node> allBodies = xc.searchMatches("body"); // as body is second tag it will be first in list 
Node neededNode = allBodies.get(0); 

//Writing Portion 

Document data = new Document(neededNode); 
XMLWriter xw = data.getWriter(); 
xw.saveXML("@filepath2");