Java解析的XML步骤:
1.创建一个DocumentBuilderFactory实例。
2.通过DocumentBuilderFactory实例的newInstance()方法获得DocumentBuilder实例。
3.我们可以通过DocumentBuilder实例的parse方法使用绝对路径将我们想解析的xml传进去,然后我们可以得到Document对象。
4.利用Document对象进行对各节点的操作。
节点类型 | NodeType | Named Constant | nodeName的返回值 | nodeValue的返回值 |
Element | 1 | ELEMENT_NODE | element name | null |
Attr | 2 | ATTRIBUTE_NODE | 属性名称 | 属性值 |
Text | 3 | TEXT_NODE | #text | 节点内容 |
首先我们创建一个xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>89</price>
</book>
<book id="2">
<name>安徒生童话</name>
<author>安徒生</author>
<year>2004</year>
<price>77</price>
<language>English</language>
</book>
</bookstore>
接下来我们来通过java的Dom解析:
//Dom解析
import javax.xml.parsers.* ;
import org.w3c.dom.* ;
public class DomTest{
public static void main(String[] args){
//创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance() ;
//创建一个DocumentBuilder对象
try{
DocumentBuilder db = dbf.newDocumentBuilder() ;
//通过DocumentBuilder对象的parser方法加载books.xml文件到当前目录下
Document doc = db.parse("books.xml") ;
//获取所有book节点的集合
NodeList bookList = doc.getElementsByTagName("book") ;
//
System.out.println("一共有"+bookList.getLength()+"书") ;
for(int i=0; i<bookList.getLength();i++){
//通过item(i)方法获取一个book节点,nodelist的索引值从0开始
Node book = bookList.item(i) ;
//获取book节点的所有属性集合
NamedNodeMap attrs = book.getAttributes() ;
System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"属性") ;
//遍历book的属性
for(int j=0; j<attrs.getLength(); j++){
Node attr = attrs.item(j);
System.out.print(attr.getNodeName()+":") ;
System.out.println(attr.getNodeValue()) ;
}
//获取每个book节点下的所有子节点
NodeList childNodes = book.getChildNodes() ;
//遍历book节点下的所有节点的名称和值
for(int k=0; k<childNodes.getLength(); k++){
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){
System.out.print(childNodes.item(k).getNodeName()+":") ;
//System.out.println(childNodes.item(k).getFirstChild().getNodeValue()) ;
System.out.println(childNodes.item(k).getTextContent()) ;
}
}
}
}catch(Exception e){
e.printStackTrace() ;
}
}
}
我们可以通过xml来保存数据继而达到实现不同设备间的数据访问。