- XML文件的存储
XML文件是以树的结构存储的,一个XML文件就是一个倒着的树,有一个根节点。根节点下有好多个子节点,然后节点有自己的属性,在标签中和标签名空一格添加属性(属性也可以作为节点的子节点进行存储,但是这样不符合常规,属性还是和节点放在一起的),然后子节点下也可以添加一些子节点。
- 为什么要使用XML文件
不同应用程序之间的通信——例如订票软件和支付软件之间的通信,不同软件之间的实现方式不一样
不同平台之间的通信——例如mac os 和windows之间的通信
不同平台间数据的共享——例如各个网站和手机app之间需要数据共享
所以XML文件的一个主要作用就是用相同的XML文件把不同的程序,平台连接起来
- XML文件的解析——获取XML文件的内容
解析XML文件的目的:获取节点名、节点值、属性名、属性值
四种解析方式:DOM、SAX、DOM4J、JDOM。
解析目标:解析XML文件后,java程序能够得到XML文件的所有数据。
java中如何保留xml结构
- DOM解析
准备工作:
创建一个DocumentBuilderFactory对象,这里创建时使用的是反射机制
创建一个DocumentBuilder的对象,用上面创建的类来创建
通过DocumentBuilder对象的parse(String fileName)方法来加载xml文件到当前项目下,parse()方法解析后返回的是Document类型的对象,Document导入的是w3c下的
解析(包括解析属性值,解析节点名称和节点值):
Document类有一个方法是getElementsByTagName(),通过标签名来获取想要的节点,返回一个NodeList类型,返回的不是一个值,而是所有该标签的节点
遍历上面获得的每个节点,NodeList有一个getLength()方法可以获得所有该标签节点的数目;NodeList中有一个item(int i)方法获取每个节点(注:NodeList的节点值从0开始),对于获取到的每个节点来进行遍历,item()的返回值是Node类型;Node有一个getAttributes()方法来获取该节点的属性值,其返回值是NamedNodeMap类型数据,NamedNodeMap是存储所有节点属性的一个集合(也可以是一个Map);对获取到的属性进行遍历,用item(int i)来遍历每一个属性,返回一个Node类型的值,Node类型有getNodeName()获取属性名,getNodeValue()获取属性值。(如果知道某个节点只有一个属性,并且知道属性名,那用NodeList中的item(int i)方法直接获得该节点,强制类型转换返回Element类型,然后用Element中的getAttribute(“属性名”)的方法来获得属性值)
解析节点名和节点值。获取子节点,Node有一个getChildNodes()方法来获得子节点,返回类型是NodeList.NodeList中用item()方法来获得子节点,getNodeName()获得子节点的名称,(会把xml中的空格和换行当成Text类型的节点也会计入,所以要区分text类型和element类型的Node,用item(int i)的getNodeType()方法获得节点类型是否是Element类型,Node.ELEMENT_NODE),获取节点值要先用item(int i).getfirstChild().getNodeValue(),因为这里节点值被当做子节点的子节点。getTextContext()方法也可以获取节点值,和上面方法的区别在于,如果该节点还有子节点的话,getTextContent()方法会获得子节点的值和该节点的值,而getFirstChild()方法获得是该节点 的第一个子节点的value, 为null,因为element类型的节点值是null