使用java删除XML的根

这是我的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); 

经过长时间的代码研究,我发现了这个愚蠢的错误,所以我纠正了它。
无论如何,谢谢你的回复。