- 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>