如何在XML中按ID删除节点元素?

问题描述

| 使用:
javax.xml
org.w3c
public void removeNodeFromXML(File xmlfile_,String uuid)
  {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(xmlfile_);

    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer tFormer = tFactory.newTransformer();

   //????

   Element rootElement = doc.getRootElement();
   rootElement.removeChild(\"1236\");

   //???

   // normalize the DOM tree to combine all adjacent nodes
   doc.normalize();
   Source source = new DOMSource(doc);
   Result dest = new StreamResult(xmlfile_);
   tFormer.transform(source,dest);

  }
XML看起来像这样
<Servers>
 //remove this guy
 <server ID=\"1236\">
  <name>Josh</name>
  <port>1234</port>
  <ip>12.2.2.3</ip>
 </server>

<server ID=\"1237\">
  <name>John</name>
  <port>1234</port>
  <ip>12.2.2.3</ip>
 </server>
</Servers>
    

解决方法

        您可以使用XPath选择特定的元素/属性。只需在网上搜索教程即可。这是个好人。您还应该阅读java.xml.xpath的Java-Doc,其中包括一些简短示例。 您的XML文件的XPath-Expression是:
/server[@ID=\'xxxx\']
    ,        您可以使用:
Element element = doc.getElementById(\"1236\");
element.getParentNode().removeChild(element);
这应为您提供ID为“ 1236”的元素。然后,您获得该元素的父节点,并通过将ID为“ 1236”的元素传递给removeChild来删除该元素。 有关完整示例,请参见此处。 希望这可以帮助。