Рубрики
Без рубрики

Как изменить XML–файл в Java – (JDOM)

– Как изменить XML–файл в Java – (JDOM)

В этом руководстве показано, как использовать JDOM для изменения XML-файла.

Содержание

  • 1. Скачать JDOM 2.x
  • 2. XML-файл, до и после
  • 3. Изменить XML-файл
  • 4. Поиск и удаление XML-элементов
  • 5. Скачать Исходный Код
  • 6. Рекомендации

P.S Протестировано с JDOM 2.0.6

Примечание Нам нужно понять, как JDOM анализировать XML и писать XML , чтобы изменять XML-документы.

1. Скачать JDOM 2.x

Мавен для JDOM.

  
      org.jdom
      jdom2
      2.0.6
  

2. XML-файл, до и после

2.1 Исходный XML-файл.



    
        mkyong
        support
        5000
        
        
    
    
        yflow
        admin
        8000
        
    

2.2 См. Ниже пример JDOM, чтобы изменить приведенный выше XML, добавить, удалить и обновить элементы, атрибуты, комментарии, CDATA и т.д.

Для персонала идентификационный номер 1001

  1. Удалить XML-элемент роль
  2. Обновить XML-элемент зарплата , обновить атрибут для МОЕГО

Для персонала идентификационный номер 1002

  1. Удалить xml-элемент имя
  2. Добавьте новый xml-элемент адрес и содержимое ДАННЫХ
  3. Обновить xml-элемент зарплата до 2000
  4. Удалите данные элемента xml

Кроме того, добавьте новый дочерний узел XML, персонал , и удалите все комментарии XML.

Ниже приведен измененный вывод XML.



  
    mkyong
    5000
    
  
  
    admin
    2000
    a & b & c
    

3. Изменить XML-файл

В приведенном ниже примере JDOM используется для анализа вышеупомянутого XML-файла, изменения содержимого и записи его в файл.

Прочтите комментарии к коду для пояснения.

package com.mkyong.xml.jdom;

import org.jdom2.CDATA;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class ModifyXmlJDom {

    private static final String FILENAME = "src/main/resources/staff.xml";

    public static void main(String[] args) throws JDOMException, IOException {

        SAXBuilder sax = new SAXBuilder();
        Document doc = sax.build(new File(FILENAME));

        Element rootNode = doc.getRootElement();

        List listChildrenNode = rootNode.getChildren("staff");

        // staff = 2
        System.out.println("No of child nodes: " + listChildrenNode.size());

        // loop the elements
        for (Element staff : listChildrenNode) {

            String id = staff.getAttribute("id").getValue();

            // if staff id is 1001
            if ("1001".equals(id.trim())) {

                // remove element role
                staff.removeChild("role");

                // update xml element `salary`, update attribute to MYR
                staff.getChild("salary").setAttribute("currency", "MYR");

            }

            // if staff id is 1002
            if ("1002".equals(id.trim())) {

                // remove xml element `name`
                staff.removeChild("name");

                // add a new xml element `address` and CDATA content
                staff.addContent(new Element("address")
                        .addContent(new CDATA("123 & abc")));

                // update xml element `salary` to 2000
                staff.getChild("salary").setText("2000");

                // remove the xml element CDATA
                staff.getChild("bio").setText("a & b & c"); // now the & will escape automatically
            }

            // Java 8 to remove all XML comments
            staff.getContent().removeIf(
                    content -> content.getCType() == Content.CType.Comment);

            // remove the XML comments via iterator
            /*ListIterator iter = staff.getContent().listIterator();
            while (iter.hasNext()) {
                Content content = iter.next();
                if (content.getCType() == Content.CType.Comment) {
                    iter.remove();
                }
            }*/

        }

        // add a new XML child node, staff id 1003
        rootNode.addContent(new Element("staff").setAttribute("id", "1003"));

        // print to console for testing
        XMLOutputter xmlOutput = new XMLOutputter();
        xmlOutput.setFormat(Format.getPrettyFormat());

        // write to console
        // xmlOutput.output(doc, System.out);

        // write to a file
        try (FileOutputStream output =
                     new FileOutputStream("c:\\test\\staff-update.xml")) {
            xmlOutput.output(doc, output);
        }

    }

}

Выход



  
    mkyong
    5000
    
  
  
    admin
    2000
    a & b & c
    

4. Поиск и удаление XML-элементов

Если XML-элемент имя равен mkyong , удалите его данные и весь персонал элементы.

package com.mkyong.xml.jdom;

import org.jdom2.CDATA;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class ModifyXmlJDom4 {

  private static final String FILENAME = "src/main/resources/staff.xml";

  public static void main(String[] args) throws JDOMException, IOException {

      SAXBuilder sax = new SAXBuilder();

      Document doc = sax.build(new File(FILENAME));

      Element rootNode = doc.getRootElement();

      List listChildrenNode = rootNode.getChildren("staff");

      // loop the elements
      for (Element staff : listChildrenNode) {

          // if name = mkyong, remove the staff node
          if ("mkyong".equals(staff.getChildText("name"))) {
              rootNode.removeContent(staff);
          }

      }

      // print to console for testing
      XMLOutputter xmlOutput = new XMLOutputter();
      xmlOutput.setFormat(Format.getPrettyFormat());

      // write to console
      xmlOutput.output(doc, System.out);

  }

}

Выход



  
    yflow
    admin
    8000
    
  

Примечание Больше примеров JDOM2 – JDOM2 Учебник

5. Скачать Исходный Код

$клон git $клон git

$компакт-диск java-xml

$cd src/основной/java/com/mkyong/xml/jdom/файловая система/

6. Рекомендации

Оригинал: “https://mkyong.com/java/how-to-modify-xml-file-in-java-jdom/”