代码如下:
package TestDemo;
import javax.naming.NameNotFoundException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
//当xml的编码和java默认的不一样时会出现错误
//通过DOM方式读取xml文件
public class DcuDemo {
public static void dom1() throws Exception{
//先创建一个Documengtbuilderfactory对象
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
//创建一个documentBuilder对象
DocumentBuilder db=dbf.newDocumentBuilder();
//通过方法parse加载books.xml文件到当前页面下
Document document=db.parse("books.xml");
//返回的是一个包含所有book节点的集合
NodeList booklist= document.getElementsByTagName("book");
//遍历包含所有book节点的集合
for(int i=0;i<booklist.getLength();i++){
System.out.println("----开始第"+(i+1)+"本书的遍历----");
//通过iteam方法获取每一个book属性
Node book=booklist.item(i);
//遍历book的属性
NamedNodeMap nnm= book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+ nnm.getLength()+"个属性");
//接下来遍历属性
for(int q=0;q<nnm.getLength();q++){
Node node= nnm.item(q);
NodeList list= book.getChildNodes();
//获取了属性名
String str1=node.getNodeName();
System.out.println("属性名为:"+str1);
//获取属性值
String str2=node.getNodeValue();
System.out.println("属性名值:"+str2);
//输出节点的个数
System.out.println("第"+(i+1)+"本书的节点书为:"+list.getLength());
//打印出节点名和节点值
for(int k=0;k<list.getLength();k++){
Node jiedian= list.item(k);
//只有当类型为Node.ELEMENT_NODE才进行输出
if(jiedian.getNodeType()==Node.ELEMENT_NODE){
//获取节点名和节点值并输出
String name=jiedian.getNodeName();
System.out.print(name+" ");
//因为element类型value是null,所以不能通过getvalue方法进行读取
// String value1=jiedian.getNodeValue();
// System.out.println("value");
//获取节点值的方法并输出、
// String value2= jiedian.getFirstChild().getNodeValue();
// System.out.println(value2);
//此方法将会获取此节点下所有的节点值
String value3=jiedian.getTextContent();
System.out.println(value3);
}
}
}
System.out.println("----结束第"+(i+1)+"本书的遍历----");
}
}
public static void main(String[] args) throws Exception{
dom1();
}
}