В этом руководстве показано, как использовать 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
- Удалить XML-элемент
роль - Обновить XML-элемент
зарплата, обновить атрибут для МОЕГО
Для персонала идентификационный номер 1002
- Удалить xml-элемент
имя - Добавьте новый xml-элемент
адреси содержимое ДАННЫХ - Обновить xml-элемент
зарплатадо 2000 - Удалите данные элемента 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. Рекомендации
- Веб-сайт JDOM
- Документация JDOM 2
- JDOM явадок
- Википедия – JDOM
- Как читать XML–файл на Java – (JDOM)
- Как написать XML–файл на Java – (JDOM)
- Пример JAXB привет, мир
Оригинал: “https://mkyong.com/java/how-to-modify-xml-file-in-java-jdom/”