Удалите дочерний корень из XML с помощью java

Это мой xml-файл.

-  -  Operating Type 1.3.6.1.4.1.31163.5.1.1 true The operating type defines which waveform type is used. This configuration takes several seconds to execute -  123   -  Active Waveform Status 1.3.6.1.4.1.31163.5.1.2 false Show the status of the waveform configured by operatingType -  Active    

Я хочу удалить узел с именем « Active wavwform Status ». Как я могу повторно создать этот конкретный узел из xml.

Код, который я написал, приведен ниже.

 rootElement = doc.getDocumentElement(); NodeList nList = doc.getElementsByTagName("parameter"); String nodeName = TF_name.getText(); System.out.println(""+nList.getLength()); for (int temp = 0; temp < nList.getLength();temp++) { Node nNode = nList.item(temp); Element eElement = (Element) nNode; String upname1 = getTagValue("name", eElement); if(upname1.equals(nodeName)) { System.out.println("Parent: "+nNode.getParentNode().getNodeName()); System.out.println("nodename: "+nNode.getNodeName()); System.out.println("rmoving ...."); rootElement.removeChild(nNode); System.out.println("removed..."); } } 

вы можете удалить узел, используя DocumentTraversal, NodeIterator.

 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.parse("/home/riddhish/developerworkspace/SplitString/src/com/updatexmlwithjava/file.xml"); DocumentTraversal traversal = (DocumentTraversal) doc; Node a = doc.getDocumentElement(); System.out.println("Current File Content"); NodeIterator iterator = traversal.createNodeIterator(a, NodeFilter.SHOW_ELEMENT, null, true); Element b = null; for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { Element e = (Element) n; if ("parameter".equals(e.getTagName())) { System.out.println(""+e.getTagName() +" "+ e.getTextContent()); b = e; } else if ("name".equals(e.getTagName()) && "Active Waveform Status".equals(e.getTextContent()) && b != null) { b.removeChild(e); } } 

Чтобы написать новый файл в файл

 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("/home/riddhish/developerworkspace/SplitString/src/com/updatexmlwithjava/file.xml")); iterator = traversal.createNodeIterator(a, NodeFilter.SHOW_ELEMENT, null, true); b = null; doc = docBuilder.newDocument(); Element rootElement = doc.createElement("deviceparameters"); doc.appendChild(rootElement); for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { Element e = (Element) n; rootElement.appendChild(doc.importNode(n, true)); } transformer.transform(source, result); 

Это мое предложение о том, как удалить узел, включая печать. Вы должны быть в правильном контексте, если удаляемый узел не привязан к корню, который вы не можете удалить, как вы пытаетесь. Найдите узел, получите его родительский элемент и удалите его из родителя. Метод removeNode является важной частью:

 import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class RemoveNodestuff { Document doc; public RemoveNodestuff(String filename) throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.parse(new File(filename)); print(doc.getDocumentElement()); } public void removeNode(String tagName, String value) { NodeList nl = doc.getElementsByTagName(tagName); if (nl != null) { for (int i = 0; i < nl.getLength(); i++) { Element item = (Element) nl.item(i); if (item.getTextContent().equals(value)) { item.getParentNode().removeChild(item); } } } print(doc.getDocumentElement()); } private void print(Node n) { NodeList nl = n.getChildNodes(); if (nl != null) { for (int i = 0; i < nl.getLength(); i++) { Node item = nl.item(i); if (item.getNodeType() == Node.ELEMENT_NODE) { System.out.println(item.getNodeName() + " " + item.getFirstChild().getNodeValue()); if (item.hasChildNodes()) { print(item); } } } } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { RemoveNodestuff removeNodestuff = new RemoveNodestuff( args[0]); removeNodestuff.removeNode("name", "Active Waveform Status"); } } 

Я получил ответ.
Фактически я удалял узел из моего xml-файла, но я не писал его в свой XML-файл.
Мне не хватало следующей части

 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(selectedFile); transformer.transform(source, result); 

После долгого изучения кода я нашел эту глупую ошибку, поэтому исправил ее.
В любом случае спасибо за ваш ответ.