2016-02-23 2 views
2

Я пытаюсь удалить элемент из xml-файла, используя removeChild(). Несмотря на то, что он говорит, что операция успешна, она все еще существует, и ее можно распечатать.xml Java не удалит элемент

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 

     DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
     Document doc = docBuilder.parse(new File("/home/sr-user1/Téléchargements/Test/intense172E.xml")); 

     Element output = (Element) doc.getElementsByTagName("output").item(0); 

     output.getParentNode().removeChild(output); 
     System.out.println(output.getTextContent()); 
+0

Ну вы печатаете 'output.getTextContent()', 'не doc' ... –

ответ

1

Метод

output.getParentNode().removeChild(output);  

удалит узел из родительского узла (в вашем случае, DOC), но вы по-прежнему иметь информацию об узле. Поскольку вы печатаете

output.getTextContent()  

Вы по-прежнему получаете текст, присутствующий в узле. Вам нужно распечатать содержимое документа, чтобы проверить, что оно было успешно удалено из исходного xml.

Edit: Если после этого вы хотите изменить исходный файл XML, вы должны написать его снова, делая это:

XMLOutputter xmlOutput = new XMLOutputter(); 
xmlOutput.setFormat(Format.getPrettyFormat()); 
xmlOutput.output(doc, new FileWriter("c:\\your_path\\file.xml")); 
+0

Итак, как полностью удалить узел? –

+0

Почему вы хотите это сделать? «output» - это просто переменная, она будет удалена сборщиком мусора java в какой-то момент, пока вы ее не используете. До тех пор, пока у вас его нет в исходном документе, почему это проблема? – randombee

+0

Это то, что у меня все еще есть в оригинальном документе. –

1

Node.removeChild(Node) не отменяет дочерний узел, он просто отрывает его от родителей. Ребенок может быть использован снова и, например, добавлен в другой узел.

Смежные вопросы