JAVA DOM解析XML文件过程详解
什么是DOM解析?
DOM(Document Object Model)文档对象模型,是一种处理XML和HTML文档的标准编程接口,它将整个文档结构解析为一个树形结构,通过调用树中的节点来操作文档中的数据。
在Java语言中,我们可以通过使用Java自带的JAXP(Java API for XML Processing)库中的DOM解析器来解析XML文档。
DOM解析XML文件的过程
- 加载XML文档
在Java中,我们可以使用DocumentBuilderFactory创建一个DocumentBuilder对象,然后调用其parse()方法来加载XML文档。具体代码如下:
java
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("example.xml");
- 获取文档的根节点
对于一个XML文档来说,根节点是文档的最顶层节点,我们需要首先获取到该节点。在Java中,我们可以通过Document类的getDocumentElement()方法来获取根节点,具体代码如下:
java
Element rootElement = document.getDocumentElement();
- 遍历节点
通过获取文档根节点后,我们可以遍历该节点下的所有子节点,如元素节点、文本节点等等。在Java中,我们可以使用Element类的getChildNodes()方法来获取该节点下的所有子节点,具体代码如下:
java
NodeList childNodes = rootElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node node = childNodes.item(i);
if (node instanceof Element) {
// 处理元素节点
} else if (node instanceof Text) {
// 处理文本节点
}
}
- 获取节点属性
在XML文档中,节点除了拥有子节点外,还可以拥有属性。在Java中,我们可以使用Element类的getAttribute()方法来获取节点的属性值,具体代码如下:
java
String attrValue = ((Element) node).getAttribute("attrName");
- 获取节点文本内容
在XML文档中,节点的文本内容是指该节点的值,例如一个元素节点的值就是其子节点的文本内容。在Java中,我们可以使用Node类的getTextContent()方法来获取节点的文本内容,具体代码如下:
java
String textContent = node.getTextContent();
示例说明
示例一:读取XML文件中的学生信息
以下是一个XML文件的样例:
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
我们可以遍历该XML文件中的所有学生信息,具体代码如下:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("students.xml");
Element rootElement = document.getDocumentElement();
NodeList students = rootElement.getElementsByTagName("student");
for (int i = 0; i < students.getLength(); i++) {
Node student = students.item(i);
if (student.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) student;
String rollno = element.getAttribute("rollno");
String firstname = element.getElementsByTagName("firstname").item(0).getTextContent();
String lastname = element.getElementsByTagName("lastname").item(0).getTextContent();
String nickname = element.getElementsByTagName("nickname").item(0).getTextContent();
String marks = element.getElementsByTagName("marks").item(0).getTextContent();
System.out.println("Roll No : " + rollno);
System.out.println("First Name : " + firstname);
System.out.println("Last Name : " + lastname);
System.out.println("Nick Name : " + nickname);
System.out.println("Marks : " + marks);
}
}
示例二:创建XML文件
以下是一个Java代码样例,它可以生成一个XML文件:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
// 创建根节点
Element company = document.createElement("company");
document.appendChild(company);
// 创建员工节点
Element employee = document.createElement("employee");
employee.setAttribute("id", "1");
company.appendChild(employee);
// 创建子节点
Element firstName = document.createElement("firstName");
firstName.appendChild(document.createTextNode("John"));
employee.appendChild(firstName);
Element lastName = document.createElement("lastName");
lastName.appendChild(document.createTextNode("Doe"));
employee.appendChild(lastName);
Element email = document.createElement("email");
email.appendChild(document.createTextNode("johndoe@mail.com"));
employee.appendChild(email);
Element department = document.createElement("department");
department.appendChild(document.createTextNode("IT"));
employee.appendChild(department);
// 将XML内容写入文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File("employee.xml"));
transformer.transform(source, result);
以上代码生成的XML文件如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<company>
<employee id="1">
<firstName>John</firstName>
<lastName>Doe</lastName>
<email>johndoe@mail.com</email>
<department>IT</department>
</employee>
</company>
总结
至此,我们已经了解了Java DOM解析XML文件的过程,并结合了两个示例来进一步说明,希望对读者有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA DOM解析XML文件过程详解 - Python技术站