如何用java读取XML文件信息
一、用Document类来储存XML文件的信息
首先,我们创建一个DOM解析器的工厂。注意,DocumentBuilderFactory是抽象工厂,无法被实例化,因此我们要运用newInstance()方法。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
接着,我们需要得到DOM解析器的对象,我们可以使用newDocumentBuilder()方法。
DocumentBuilder builder = factory.newDocumentBuilder();
最后我们就可以利用Document类来储存XML文件信息。这里用到 DocumentBuilder类中的prase()方法。
Document document = builder.parse("src/main/java/ParseXML/收藏信息.xml");
完整的代码内容如下:
// 创建DOM解析器工厂的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//创建DOM解析器的对象
DocumentBuilder builder = factory.newDocumentBuilder();
//将解析的XML文件内容存入Document类的对象
Document document = builder.parse("src/main/java/ParseXML/收藏信息.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
二、读取Doucument类的对象中存储的XML信息
为了方便演示,这里将XML文件内的内容先贴出来
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="Mate30 Pro" price="2300"/>
<Type name="P30 Pro" price="4500"/>
<Type name="nova 6" price="1800"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone13 Pro" price="15000"/>
</Brand>
</PhoneInfo>
首先,我们需要获得doucment对象中根节点下面的子节点,即全部的Brand节点。
//获取对象中Brand节点
NodeList brands = document.getElementsByTagName("Brand");
获得根节点下的所有Brand节点后,我们遍历每一个Brand节点。
//遍历获取的Brand节点
for (int i = 0; i < brands.getLength(); i++) {
//获取一个节点
Node node = brands.item(i);
//将节点存储到Element中
Element eleBrand = (Element) node;
//读取Element中的name属性
String brandName = eleBrand.getAttribute("name");
System.out.println(brandName+":");
}
遍历每一个Brand节点后,我们也需要遍历Brand下的子节点,即Type节点。
//获取Brand节点的子节点
NodeList types = eleBrand.getChildNodes();
//遍历子节点
for (int j = 0; j < types.getLength(); j++) {
//获取一个子节点
Node typeNode = types.item(j);
if (typeNode.getNodeType()==Node.ELEMENT_NODE){
//获得子节点,存入Element中
Element eleType = (Element) typeNode;
//输出 子节点中 name 属性值
System.out.println(eleType.getAttribute("name"));
}
}
以下为获取并打印XML信息全部内容的代码
//获取对象中Brand节点
NodeList brands = document.getElementsByTagName("Brand");
//遍历获取的Brand节点
for (int i = 0; i < brands.getLength(); i++) {
//获取一个节点
Node node = brands.item(i);
//将节点存储到Element中
Element eleBrand = (Element) node;
//读取Element中的name属性
String brandName = eleBrand.getAttribute("name");
System.out.println(brandName+":");
//获取Brand节点的子节点
NodeList types = eleBrand.getChildNodes();
//遍历子节点
for (int j = 0; j < types.getLength(); j++) {
//获取一个子节点
Node typeNode = types.item(j);
if (typeNode.getNodeType()==Node.ELEMENT_NODE){
//获得子节点,存入Element中
Element eleType = (Element) typeNode;
System.out.println(eleType.getAttribute("name"));
}
}
}
三、完整代码展示
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;
public class ParseXMLDemo {
Document document = null;
public void getDocument() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
this.document = builder.parse("src/main/java/ParseXML/收藏信息.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
public void showInfo() {
//获取对象中Brand节点
NodeList brands = document.getElementsByTagName("Brand");
//遍历获取的Brand节点
for (int i = 0; i < brands.getLength(); i++) {
//获取一个节点
Node node = brands.item(i);
//将节点存储到Element中
Element eleBrand = (Element) node;
//读取Element中的name属性
String brandName = eleBrand.getAttribute("name");
System.out.println(brandName+":");
//获取Brand节点的子节点
NodeList types = eleBrand.getChildNodes();
//遍历子节点
for (int j = 0; j < types.getLength(); j++) {
//获取一个子节点
Node typeNode = types.item(j);
if (typeNode.getNodeType()==Node.ELEMENT_NODE){
//获得子节点,存入Element中
Element eleType = (Element) typeNode;
System.out.println(eleType.getAttribute("name"));
}
}
}
}
public static void main(String[] args) {
ParseXMLDemo parseXMLDemo = new ParseXMLDemo();
parseXMLDemo.getDocument();
parseXMLDemo.showInfo();
}
}