dom4j解析:(功能强大,容易使用。需要dom4j的jar包) 结合文档开发。 XPath提取xml文档信息 XPath语法: <AAA> <BBB id="b1"> <CCC> </CCC> <DDD> </DDD> <EEE> </EEE> </BBB> <BBB name="bbb"> <CCC> </CCC> <DDD> </DDD> <EEE> </EEE> </BBB> <BBB id="b2"> <CCC> </CCC> </BBB> </AAA> //BBB/CCC:(相对节点BBB,遍历所有的父类节点是BBB下的CCC节点) /AAA/BBB/CCC:从根节点开始遍历(AAA必须为根) /AAA/BBB/*:提取根节点AAA下的第一个BBB节点下的所有节点 /*/*/CCC:提取有2个父节点的CCC节点 //*:提取所有节点 /AAA/BBB[1]:提取AAA节点下的第一个BBB节点 /AAA/BBB[last()]:提取AAA节点下的最后一个BBB节点 //@id:选择所有的有id属性的元素(节点) //BBB[@id]:选择所有有id属性的BBB元素 //BBB[@name]:选择所有有name属性的BBB元素 //BBB[@*]:选择所有有任意属性的BBB元素 //BBB[not(@*)]:选择所有没有属性的BBB元素 //BBB[@id="b1"]:提取出id值等于b1的BBB元素 //BBB[@name="bbb"]:提取出name值等于bbb的BBB元素 //BBB[normalize-space(@name)="bbb"]:选择含有name属性,通过normalize-space()函数去掉空格后等于bbb的元素 //*[count(BBB)=2]:选择含有2个BBB节点的元素 //*[count(*)=2]:选择含有2个子元素的元素 //*[name()="BBB"]:提取所有名称为BBB的标签的元素 可用or,and连接以上条件 ........... 结合文档 ........... XML Schema:一种xml文档结构与内容的模式语言,为了克服DTD的局限性(取代DTD)(模式文档=约束文档。遵循这个模式书写的xml文档,又称为实例文档) XML Schema符合XML语法,易于被Sax,Dom解析,命名空间好,比DTD支持的数据类型多,约束能力强。
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<书架>
<书>
<书名 name="123">JAVA就业培训教材</书名>
<作者>张孝祥</作者>
<价格>修改成功123</价格>
</书>
<书>
<书名>SaxJDK7.0全解</书名>
<作者>哈哈</作者>
<价格>90.00</价格>
</书>
</书架>
<pre name="code" class="java">package XML及其操作;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class Dom4J解析Xml {
@Test
public void read() throws Exception{
//解析xml文档
SAXReader reader = new SAXReader();
Document doc = reader.read("src/XML及其操作/Sax解析.xml");
//得到元素
Element root = doc.getRootElement();
Element book = (Element) root.elements("书").get(0);
System.out.println(book.elementText("书名"));
//获取属性
System.out.println(book.element("书名").attributeValue("name"));
}
@Test
public void readAll() throws Exception{
//解析xml文档
SAXReader reader = new SAXReader();
Document doc = reader.read("src/XML及其操作/dom4j解析.xml");
//得到元素
Element root = doc.getRootElement();
treeWalk(root);
}
@Test
public void add() throws Exception{
SAXReader reader = new SAXReader();
Document doc = reader.read("src/XML及其操作/dom4j解析.xml");
//得到元素
Element book = doc.getRootElement();
book.element("书").element("售价").setText("23.00元");
book.element("书").element("价格").setText("修改成功123");
//更新document对象
write(doc);
}
@Test
public void delete() throws Exception{
SAXReader reader = new SAXReader();
Document doc = reader.read("src/XML及其操作/dom4j解析.xml");
//得到元素
Element price = doc.getRootElement().element("书").element("售价");
//System.out.println(price.getText());
//更新document对象
price.getParent().remove(price);
write(doc);
}
public void treeWalk(Document doc){
treeWalk(doc.getRootElement());
}
@Test
/**
* 需要jaxen-beta.jar支持
* @throws Exception
*/
public void operByXpath() throws Exception{
SAXReader reader = new SAXReader();
Document doc = reader.read("src/XML及其操作/dom4j解析.xml");
//得到元素
List list = doc.selectNodes("//作者");
}
public void treeWalk(Element e){
for( int i = 0 , size = e.nodeCount() ; i < size ; i++){
Node node = e.node(i);
if(node instanceof Element){//如果子结点是仍然为元素,继续递归 (node包含5中类型:element,attr,text,comments,document)
treeWalk((Element)node);
}else{
System.out.println(node.getText());
}
}
}
public void write(Document doc) throws Exception{
// lets write to a file
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileWriter("src/XML及其操作/dom4j解析.xml" ) , format );
writer.write( doc );
writer.close();
}
}
原文地址:http://blog.csdn.net/u010218226/article/details/44116389