1、表现:一“.xml”为扩展名的文件
2、存储:树形结构
3、xml解析应用:
不同应用程序之间的通信-->订票软件和支付软件
不同的平台间通信-->操作系统
不同平台间数据的共享-->网站和手机
4、DOM解析原理
将整个xml文件先加载完毕,才进行解析
在Java程序中读取xml文件的过程也称为解析xml文件
解析的目的:获取节点名、节点值、属性名、属性值
解析的方式:DOM、SAX、DOM4J、JDOM
5、解析前准备工作:
packagecom.imooc_xml.dom.test;importjava.io.IOException;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.NamedNodeMap;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;public classDOMTest {public static voidmain(String[] args) {//1、创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();//2、创建DocumentBuilder对象
try{
DocumentBuilder db=dbf.newDocumentBuilder();//通过DocumentBuilder对象的parser方法加载xml文件到当前项目下
Document document = db.parse("xml/books.xml");}
}catch(ParserConfigurationException e) {
e.printStackTrace();
}catch(SAXException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
6、解析xml文件的属性名和属性值:
NodeList bookList = document.getElementsByTagName("book");//遍历每一个book节点
System.out.println("一共有"+bookList.getLength()+"书");for(int i=0;i
Node book=bookList.item(i);//遍历book的属性
NamedNodeMap attrs =book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");for(int j=0;j
Node attr=attrs.item(j);
System.out.println("属性名:"+attr.getNodeName());
System.out.println("属性值:"+attr.getNodeValue());
}/*** 前提是,已经知道book节点有且只能有一个ID属性
* Element book = bookList.item(i);
* String attrValue = book.getAttribute("id");*/
7、解析xml文件的节点名和节点值:
NodeList childNodes =book.getChildNodes();
System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点");for (int k = 0;k
if(childNodes.item(k).getNodeType() ==Node.ELEMENT_NODE){
System.out.println(childNodes.item(k).getNodeName());//获取element类型element类型节点的节点值//getFirstChild().getNodeValue():认为值是子节点的子节点//System.out.println(childNodes.item(k).getFirstChild().getNodeValue());//区别:aaJAVA编程思想一个是null,一个是aaJAVA编程思想
System.out.println(childNodes.item(k).getTextContent());
}
}
8、 常用节点类型: