如何在Java中修改或更新XML文件 - DOM解析器

x33g5p2x  于2022-10-06 转载在 Java  
字(4.9k)|赞(0)|评价(0)|浏览(963)

在这篇文章中, 我们将学习如何使用DOM解析器在Java中更新或修改现有的XML文件。在这个例子中,我们在XML文件中有一个User元素的列表,我们将用Java程序来修改这些User元素.

我们要对XML中的每个User元素进行以下修改。

  1. 添加一个新元素
  2. 更新现有元素的值
  3. 删除现有元素

开发过程步骤

  1. 现有的users.xml文件
  2. 使用DOM解析器更新现有的XML文件的程序
  3. 更新的 users.xml 文件

1. 现有的users.xml文件

假设我们有下面的源XML文件。我们将学习如何在java程序中使用DOM解析器来修改或编辑这个XML文件。

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <Users>
  3. <User>
  4. <id>1</id>
  5. <firstName>Ramesh</firstName>
  6. <lastName>Fadatare</lastName>
  7. <age>28</age>
  8. <gender>Male</gender>
  9. </User>
  10. <User>
  11. <id>2</id>
  12. <firstName>John</firstName>
  13. <lastName>Cena</lastName>
  14. <age>45</age>
  15. <gender>Male</gender>
  16. </User>
  17. <User>
  18. <id>3</id>
  19. <firstName>Tom</firstName>
  20. <lastName>Cruise</lastName>
  21. <age>40</age>
  22. <gender>Male</gender>
  23. </User>
  24. </Users>

2. 使用DOM解析器更新现有的XML文件的程序

下面是使用DOM解析器完成上述所有更新的java程序.

  1. package net.javaguides.javaxmlparser.dom;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import javax.xml.parsers.ParserConfigurationException;
  7. import javax.xml.transform.OutputKeys;
  8. import javax.xml.transform.Transformer;
  9. import javax.xml.transform.TransformerConfigurationException;
  10. import javax.xml.transform.TransformerException;
  11. import javax.xml.transform.TransformerFactory;
  12. import javax.xml.transform.TransformerFactoryConfigurationError;
  13. import javax.xml.transform.dom.DOMSource;
  14. import javax.xml.transform.stream.StreamResult;
  15. import org.w3c.dom.Document;
  16. import org.w3c.dom.Element;
  17. import org.w3c.dom.Node;
  18. import org.w3c.dom.NodeList;
  19. import org.xml.sax.SAXException;
  20. public class ModifyXMLFileInJava {
  21. public static void main(String[] args) {
  22. String filePath = "users.xml";
  23. File xmlFile = new File(filePath);
  24. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  25. DocumentBuilder dBuilder;
  26. try {
  27. dBuilder = dbFactory.newDocumentBuilder();
  28. // parse xml file and load into document
  29. Document doc = dBuilder.parse(xmlFile);
  30. doc.getDocumentElement().normalize();
  31. // update Element value
  32. updateElementValue(doc);
  33. // delete element
  34. deleteElement(doc);
  35. // add new element
  36. addElement(doc);
  37. // write the updated document to file or console
  38. writeXMLFile(doc);
  39. } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
  40. e1.printStackTrace();
  41. }
  42. }
  43. private static void writeXMLFile(Document doc)
  44. throws TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException {
  45. doc.getDocumentElement().normalize();
  46. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  47. Transformer transformer = transformerFactory.newTransformer();
  48. DOMSource source = new DOMSource(doc);
  49. StreamResult result = new StreamResult(new File("users_updated.xml"));
  50. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  51. transformer.transform(source, result);
  52. System.out.println("XML file updated successfully");
  53. }
  54. /**
  55. * Add a new element salary to user element.
  56. * @param doc
  57. */
  58. private static void addElement(Document doc) {
  59. NodeList users = doc.getElementsByTagName("User");
  60. Element emp = null;
  61. // loop for each user
  62. for (int i = 0; i < users.getLength(); i++) {
  63. emp = (Element) users.item(i);
  64. Element salaryElement = doc.createElement("salary");
  65. salaryElement.appendChild(doc.createTextNode("10000"));
  66. emp.appendChild(salaryElement);
  67. }
  68. }
  69. /**
  70. * Delete gender element from User element
  71. * @param doc
  72. */
  73. private static void deleteElement(Document doc) {
  74. NodeList users = doc.getElementsByTagName("User");
  75. Element user = null;
  76. // loop for each user
  77. for (int i = 0; i < users.getLength(); i++) {
  78. user = (Element) users.item(i);
  79. Node genderNode = user.getElementsByTagName("gender").item(0);
  80. user.removeChild(genderNode);
  81. }
  82. }
  83. /**
  84. * Update firstName element value to Upper case.
  85. * @param doc
  86. */
  87. private static void updateElementValue(Document doc) {
  88. NodeList users = doc.getElementsByTagName("User");
  89. Element user = null;
  90. // loop for each user
  91. for (int i = 0; i < users.getLength(); i++) {
  92. user = (Element) users.item(i);
  93. Node name = user.getElementsByTagName("firstName").item(0).getFirstChild();
  94. name.setNodeValue(name.getNodeValue().toUpperCase());
  95. }
  96. }
  97. }

3. 更新 users.xml 文件

  1. <?xmlversion="1.0"encoding="UTF-8"standalone="no"?>
  2. <Users>
  3. <User>
  4. <id>1</id>
  5. <firstName>RAMESH</firstName>
  6. <lastName>Fadatare</lastName>
  7. <age>28</age>
  8. <salary>10000</salary>
  9. </User>
  10. <User>
  11. <id>2</id>
  12. <firstName>JOHN</firstName>
  13. <lastName>Cena</lastName>
  14. <age>45</age>
  15. <salary>10000</salary>
  16. </User>
  17. <User>
  18. <id>3</id>
  19. <firstName>TOM</firstName>
  20. <lastName>Cruise</lastName>
  21. <age>40</age>
  22. <salary>10000</salary>
  23. </User>
  24. </Users>

请注意,我们在User元素中添加了一个新的 "工资 "字段,我们将firstName从小写字母更新为大写字母,并且从用户标签中删除了gender元素。
查看以前的文章 - 如何使用DOM解析器在Java中读取XML文件和如何使用DOM解析器在Java中创建XML文件

相关文章

最新文章

更多