package DOM方式;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TesTDDMParse {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//(1) 创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//(2)创建DocumenyBuilder对象
DocumentBuilder db=dbf.newDocumentBuilder();
//(3)通过DocumentBuilder的parse(. . .)方法得到Document对象
Document doc=db.parse("book.xml");
//(4)通过getElementsByTagName(. . .)方法获取到节点的列表
NodeList bookList=doc.getElementsByTagName("book");
System.out.println(bookList.getLength());
//(5)通过for循环遍历,每一个节点
for(int i=0; i<bookList.getLength();i++) {
//(6)得到每一个节点的属性和属性值
Node book=bookList.item(i);
NamedNodeMap attrs=book.getAttributes(); //得到属性的集合
//遍历每一个属性
for(int j=0;j<attrs.getLength();j++){
//得到每一个属性
Node id=attrs.item(j);
System.out.println("属性的名称"+id.getNodeName()+"\t"+id.getNodeValue());
}
}
System.out.println("\n每个节点的名称和节点的值");
//(7)得到每个节点名和节点值
for(int i=0;i<bookList.getLength();i++){
//得到每一个book节点
Node book=bookList.item(i);
NodeList subNode=book.getChildNodes();
//使用for循环遍历每一个book的子节点
for(int j=0;j<subNode.getLength();j++) {
Node childNode=subNode.item(j);
//System.out.println(childNode.getNodeName());
short type=childNode.getNodeType();//获取节点的类型
if(type==childNode.getNodeType()) {
System.out.println("节点的名称:"+childNode.getNodeName()+"\t"+childNode.getTextContent());
}
}
}
}
}
这是books
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1001">
<name>Java开发</name>
<author>张小三</author>
<price>98.5</price>
</book>
<book id="1002">
<name>李四</name>
<author>Java</author>
<price>99.2</price>
</book>
</books>
这是错误
Exception in thread "main" java.io.FileNotFoundException: D:\java\第二阶段\XML技术\books.xml (系统找不到指定的文件。)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:110)
at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86)
at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:654)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:860)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:246)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:178)
at DOM方式.TesTDDMParse.main(TesTDDMParse.java:25)
