2016-10-04 3 views
0

Есть ли возможность удалить корневой элемент xml-файла? Как это сделать на Java? Мой файл XML выглядит следующим образом:Как удалить корневой элемент из XML-документа?

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

Я уже пытался разобрать его Сакс и хорошо я это реализовать, но я обнаружил, что SAX не позволяет писать код в XML-файл (я прочитал, что это действительно трудно). У вас есть идея, как получить контент из корневого тега и записать его в новый документ с телом в качестве родителя?

+0

SAX Очень низкий уровень. Вместо этого вы должны использовать DOM. Начните с чтения информации о [DocumentBuilderFactory] (http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) и следуйте ссылкам на DocumentBuilder и Document. – VGR

+0

Возможный дубликат [Как удалить корневой узел XML-документа с DOM] (http://stackoverflow.com/questions/4198967/how-to-remove-the-root-node-of-an-xml-document -with-dom) –

ответ

-1

Если вы только нужно лишить <root> и </root> тегов не нужно, чтобы разобрать файл XML с помощью SAX и т.д. Просто разобрать его в виде строки и заменить тег с пустыми строками.

Очень очень простой пример может быть:

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

Один из способов решить вашу проблему, чтобы разобрать на документ с помощью пакета Scilca XML врезания доступного на GitHub. Вы можете получить структуру дочернего элемента, а затем сохранить его.

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");