2016-04-05 3 views
4

Поскольку все другие вопросы, относящиеся к этой теме, относятся к определенной проблеме программирования (например, «Я получаю исключение NullPointerException при попытке этого и этого»), и ответы на них исправляются ошибки в программировании, вот простое решение для следующего вопроса:Удалить узел из XML-файла (DOM4J, JAVA)

Как удалить узел из XML-файла с помощью DOM4J?

ответ

4

Предполагая, что у вас уже есть узел, который вы хотите удалить:

Document document = node.getDocument(); 

    node.detach(); 

    XMLWriter writer = new XMLWriter(new FileWriter(document.getPath() + document.getName()), OutputFormat.createPrettyPrint()); 
    writer.write(document); 
    writer.close(); 

опущен Оператор примерки загвоздка.

Краткое объяснение:

  1. Получение документа и хранить его в локальной переменной необходимо, потому что после отсоединения узла, вы не можете получить документ, вызывающему node.getDocument()
  2. вызывающем открепление() на узле будет удалить узел из объекта документа (не из файла)
  3. создания XMLWriter с OutputFormat.createPrettyPrint() необходим, если вы не хотите все пустые строки в документе после

Для более полного примера, вот тест JUnit:

@Test 
public void dom4j() throws DocumentException, IOException { 
    String absolutePath = Paths.get(PATH_TO_XML).toAbsolutePath().toString(); 

    SAXReader reader = new SAXReader(); 
    Document document = reader.read(absolutePath); 
    Node node = document.selectSingleNode(XPATH_TO_NODE); 

    node.detach(); 

    XMLWriter writer = new XMLWriter(new FileWriter(absolutePath), OutputFormat.createPrettyPrint()); 
    writer.write(document); 
    writer.close(); 
} 

Для больше информации о dOM4J см: http://dom4j.sourceforge.net/dom4j-1.6.1/guide.html

и дополнительной информации для синтаксиса XPath: http://www.w3schools.com/xsl/xpath_syntax.asp

0

Чтобы удалить узел с помощью XPath, это то, как вы можете сделать в vtd-xml

import com.ximpleware.*; 
import java.io.*; 

public class removeElement { 
    public static void main(String s[]) throws VTDException,IOException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("input.xml", false)) 
      return; 
     VTDNav vn = vg.getNav(); 
     XMLModifier xm = new XMLModifier(vn); 
     AutoPilot ap = new AutoPilot(vn); 
     ap.selectXPath("/ClOrdIDS/ClOrdID[@id='3']"); 
     int i=0; 
     while((i=ap.evalXPath())!=-1){ 
      xm.remove(); 
     } 
     xm.output("output.xml"); 
    } 
} 
+0

Насколько я ценю новые решения: это не ответ на вопрос. Это ответ на вопрос ** Как удалить узел из файла XML с помощью XPath и vtd-xml? ** или заголовок ** Удалить узел из XML-файла (XPATH, VTD-XML, JAVA) ** –

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