- Java XML 教程
- Java XML 首页
- Java XML 概述
- Java XML 解析器
- Java DOM 解析器
- Java DOM 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java SAX 解析器
- Java SAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- JDOM XML 解析器
- JDOM XML 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java StAX 解析器
- Java StAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XPath 解析器
- Java XPath 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java DOM4J 解析器
- Java DOM4J 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XML 有用资源
- Java XML - 问题与解答
- Java XML - 快速指南
- Java XML - 有用资源
- Java XML - 讨论
Java DOM 解析器 - 修改 XML 文档
Java DOM 解析器 API 提供了修改已存在 XML 文档的方法。我们可以使用 Java DOM 解析器的方法添加或删除元素和属性,修改元素和属性值的文本内容。
setTextContent() 方法替换元素的原始文本,removeAttribute() 删除现有的属性,setAttribute() 方法为元素设置新的属性。
使用 Java DOM 解析器修改 XML
我们可以通过以下步骤使用 Java 中的 DOM 解析器修改 XML 文档。
- 步骤 1:创建 DocumentBuilder 对象
- 步骤 2:读取 XML
- 步骤 3:解析 XML 文档
- 步骤 4:更新 XML 文档的内容
- 步骤 5:将内容写入 XML 文件
- 步骤 6:输出到控制台进行测试
请参考本节的此页面了解前三个步骤。
步骤 4:更新 XML 文档的内容
我们可以更新文本内容、属性值、添加新的元素和新的属性到我们现有的 XML 文档中。
Element element = xmldoc.getDocumentElement(); element.setTextContent("14"); element.removeAttribute("attr_name"); element.setAttribute("attr_name","attr_value");
setTextContent("text_content") 方法用于设置元素的文本内容。此方法与 Element 对象一起使用,并以字符串作为参数。
removeAttribute("attr_name") 方法从 Element 对象中删除属性。如果我们要从中删除属性的 Element 是只读的,则会抛出NO_MODIFICATION_ALLOWED_ERR 错误。
setAttribute("attr_name","attr_value") 方法以属性名称和属性值作为参数,并将它们设置为 Element 对象。
更新文本内容
让我们考虑 college.xml 文件,其中包含三个部门的详细信息。现在,我们将尝试将电气和电子工程系的教职工人数从 23 更新为 14。setTextContent("text") 方法用于更新元素的文本内容。
college.xml
以下是更新前的 college.xml 文件。现在让我们尝试在我们的 Java 程序中更新它。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><college> <department id="101"> <name>Computer Science</name> <staffCount>20</staffCount> </department> <department id="102"> <name>Electrical and Electronics</name> <staffCount>23</staffCount> </department> <department id="103"> <name>Mechanical</name> <staffCount>15</staffCount> </department> </college>
ModifyXMLDemo.java
在下面的 Java 程序中,我们将所有标记名为“department”的节点检索到 NodeList 中。然后,我们迭代所有节点以查找“电气和电子工程”系,并将 staffCount 属性更改为 14。
import java.io.File; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class ModifyXMLDemo { public static void main(String argv[]) { try { //Creating a DocumentBuilder Object DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); //Reading the XML file File inputFile = new File("src/modifydom.xml"); //Parsing the XML Document Document doc = docBuilder.parse(inputFile); //Updating the staffCount for "Electrical and Electronics" department NodeList deptList=doc.getElementsByTagName("department"); for(int i=0;i<deptList.getLength();i++) { Element element= (Element) (deptList.item(i)); String s=element.getElementsByTagName("name").item(0).getTextContent(); if(s.equals("Electrical and Electronics")) { Element staffCount = (Element) element.getElementsByTagName("staffCount").item(0); staffCount.setTextContent("14"); } } //Writing the updated content into the file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); FileOutputStream output = new FileOutputStream("college.xml"); StreamResult result = new StreamResult(output); transformer.transform(source, result); //writing the content on console StreamResult consoleResult = new StreamResult(System.out); transformer.transform(source, consoleResult); } catch (Exception e) { e.printStackTrace();} } }
输出
以下是更新 staffCount 后更新的 XML 文档。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><college> <department id="101"> <name>Computer Science</name> <staffCount>20</staffCount> </department> <department id="102"> <name>Electrical and Electronics</name> <staffCount>14</staffCount> </department> <department id="103"> <name>Mechanical</name> <staffCount>15</staffCount> </department> </college>
添加新元素
现在,让我们更进一步,尝试将另一个名为“土木工程”的系添加到我们上面的“college.xml”文件中。要添加新元素,我们可以使用createElement("Element_name") 方法创建,并使用appendChild(Element) 将元素附加到现有文档的根元素。
ModifyXMLAddElementsDemo.java
在下面的程序中,我们首先使用 getDocumentElement() 方法获取根元素。然后,我们创建“土木工程”系元素并将其添加到根元素。
import java.io.File; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class ModifyXMLAddElementsDemo { public static void main(String argv[]) { try { //Creating a DocumentBuilder Object DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); //Reading the XML file File inputFile = new File("college.xml"); //Parsing the XML Document Document doc = docBuilder.parse(inputFile); //Adding new department element Element rootElement = doc.getDocumentElement(); Element department = doc.createElement("department"); department.setAttribute("id", "104"); Element name = doc.createElement("name"); Element staffCount = doc.createElement("staffCount"); department.appendChild(name); department.appendChild(staffCount); name.appendChild(doc.createTextNode("Civil")); staffCount.appendChild(doc.createTextNode("10")); rootElement.appendChild(department); //Creating transformer object TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); //Writing updated content into the file DOMSource source = new DOMSource(doc); FileOutputStream output = new FileOutputStream("college.xml"); StreamResult result = new StreamResult(output); transformer.transform(source, result); //writing the content on console StreamResult consoleResult = new StreamResult(System.out); transformer.transform(source, consoleResult); } catch (Exception e) { e.printStackTrace();} } }
输出
添加“土木工程”系后的更新文件如下
<?xml version="1.0" encoding="UTF-8" standalone="no"?><college> <department id="101"> <name>Computer Science</name> <staffCount>20</staffCount> </department> <department id="102"> <name>Electrical and Electronics</name> <staffCount>14</staffCount> </department> <department id="103"> <name>Mechanical</name> <staffCount>15</staffCount> </department> <department id="104"><name>Civil</name><staffCount>10</staffCount></department></college>