xml的解析方式有两种:dom解析,sax解析。
我们来看一下dom是如何解析xml的!
DOM的全名为Document Object Model的缩写。即文档对象模型!dom就相当于一棵树一些样,树枝就是每一个节点:
我们先来看一个xml文件(在escplise下生产xml后转换为source视图操作):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xml-body>
<book>
<bookname>math</bookname>
<bookprice>12</bookprice>
</book>
<book>
<bookname>english</bookname>
<bookprice>33</bookprice>
</book>
</xml-body>
那么我们怎么用java来操作呢?其实要用到一个工厂类DocumentBuilderFacotry来产生一个dom解析器!
public static Document createHandle()
{
try {
//首先我们创建工厂!产生dom解析器产生工厂!
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//从工厂中创建dom解析器!
DocumentBuilder db = dbf.newDocumentBuilder();
//接受一个xml文档,并把文档转换为Document对象!
return db.parse("src/book.xml");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
在这之后就可以操作dom的节点以操作xml了!
public static void readXml(Document d)
{
//这里的NodeList得到的是一个名为“book”的标签元素的列表
//也就是里面的元素都是book的node。
NodeList nl = d.getElementsByTagName("bookname");
Node n = null;
for(int i = 0 ;i < nl.getLength(); i++)
{
//可以获得该元素的某一个node
n = nl.item(i);
//获得node的TextContent!
System.out.println(n.getFirstChild().getNodeValue());
//当然我们有一个直接的方法获得TextContent!
System.out.println(n.getNodeName()+"--"+n.getTextContent());
}
}
或者这样
ublic static void readXml_1(Document d)
{
//把格式的空格去掉
d.normalize();
NodeList nl = d.getElementsByTagName("bookname");
//由于得到的是element所以就可以强转
Element e = (Element) nl.item(0);
System.out.println(e.getFirstChild().getNodeValue());
}
我们当然也可以改变xml文件
public static void writeXml(Document d)
{
//生成一个element对象
Element e = (Element) d.createElement("bookauthor");
//在element中添加内容
e.setTextContent("jack");
//得到要添加的节点
NodeList nl = d.getElementsByTagName("book");
//添加到得到的节点末端
nl.item(0).appendChild(e);
}
我们这样只是在内存中改变了所以我们在写入xml'文件
public static void closeXml(Document d)
{
try {
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
//这里的DOMSource是数据源。而StreamResult是数据的目标地点
tf.transform(new DOMSource(d),new StreamResult(new File("src/book.xml")));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
这样就可以用Dom来操作xml了,这是jaxp的方法去处理xml!