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