一、什么是Java Document类
Document是Java中的一种类,用于描述HTML或XML文档。它提供了许多方法,可以获取文档的信息,其中包括文档的标题、元素、属性等等。使用Document类,我们可以方便地获取HTML或XML文档中的信息,以便我们对文档进行各种操作。
二、Java Document类的用法
1、创建Document对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document document = builder.parse(new File("file.xml"));
在上述代码中,首先我们使用DocumentBuilderFactory类的newInstance()
方法获取一个工厂实例,然后使用该实例获取一个DocumentBuilder对象。最后,我们使用DocumentBuilder对象的parse()
方法传入一个文件路径参数,就可以得到一个Document对象。
2、获取文档元素
Element rootElement = document.getDocumentElement();
System.out.println("根元素标签名:" + rootElement.getTagName());
在上述代码中,我们使用Document对象的getDocumentElement()
方法获取文档的根元素,并获取该元素的标签名。
3、获取元素属性
NamedNodeMap attrs = element.getAttributes();
Node idAttr = attrs.getNamedItem("id");
System.out.println("id属性值:" + idAttr.getNodeValue());
在上述代码中,我们首先使用Element对象的getAttributes()
方法获取元素的所有属性,然后使用NamedNodeMap对象的getNamedItem()
方法获取指定名称的属性。最后,我们通过Node对象的getNodeValue()
方法获取属性值。
4、获取元素子节点
NodeList childNodes = element.getChildNodes();
for(int i = 0; i < childNodes.getLength(); i++) {
Node child = childNodes.item(i);
if(child instanceof Element) {
System.out.println("节点名:" + child.getNodeName()
+ " 节点值:" + child.getTextContent());
}
}
在上述代码中,我们使用Element对象的getChildNodes()
方法获取元素的所有子节点,然后遍历每个子节点,如果子节点是一个Element对象,就获取其节点名和节点值(即文本内容)。
三、Java Document类示例代码
1、解析XML文档
假设我们有一个XML文件,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<name>Tom</name>
<age>18</age>
</student>
<student id="002">
<name>Lucy</name>
<age>19</age>
</student>
</students>
下面是使用Java Document类解析该XML文档的示例代码:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLParser {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document document = builder.parse(new File("test.xml"));
Element rootElement = document.getDocumentElement();
System.out.println("根元素标签名:" + rootElement.getTagName());
NodeList studentNodes = rootElement.getElementsByTagName("student");
for(int i = 0; i < studentNodes.getLength(); i++) {
Element student = (Element) studentNodes.item(i);
NamedNodeMap attrs = student.getAttributes();
Node idAttr = attrs.getNamedItem("id");
System.out.println("id属性值:" + idAttr.getNodeValue());
NodeList childNodes = student.getChildNodes();
for(int j = 0; j < childNodes.getLength(); j++) {
Node child = childNodes.item(j);
if(child instanceof Element) {
System.out.println("节点名:" + child.getNodeName()
+ " 节点值:" + child.getTextContent());
}
}
}
}
}
2、生成XML文档
假设我们要生成一个XML文件,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<name>Tom</name>
<age>18</age>
</student>
<student id="002">
<name>Lucy</name>
<age>19</age>
</student>
</students>
下面是使用Java Document类生成该XML文档的示例代码:
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
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.Element;
public class XMLGenerator {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
org.w3c.dom.Document document = builder.newDocument();
Element rootElement = document.createElement("students");
document.appendChild(rootElement);
Element student1 = document.createElement("student");
student1.setAttribute("id", "001");
Element name1 = document.createElement("name");
name1.setTextContent("Tom");
Element age1 = document.createElement("age");
age1.setTextContent("18");
student1.appendChild(name1);
student1.appendChild(age1);
rootElement.appendChild(student1);
Element student2 = document.createElement("student");
student2.setAttribute("id", "002");
Element name2 = document.createElement("name");
name2.setTextContent("Lucy");
Element age2 = document.createElement("age");
age2.setTextContent("19");
student2.appendChild(name2);
student2.appendChild(age2);
rootElement.appendChild(student2);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource xmlSource = new DOMSource(document);
StreamResult outputTarget = new StreamResult(new FileOutputStream(new File("test.xml")));
transformer.transform(xmlSource, outputTarget);
}
}
结语
Java Document类提供了一种方便的方式来解析和生成HTML或XML文档。无论是在读取网络上的数据,还是在将本地数据以XML格式存储时,Document类都能够帮助我们方便地实现这些任务。通过本文的介绍和示例代码,相信读者已经了解了Document类的使用方法,并能够应用Document类来进行XML文档的解析和生成。