[b][color=red]使用 domj4 API 创建与修改 XML 文档[/color][/b][url]http://www.blogjava.net/tojava/archive/2005/12/20/24862.html[/url]
[color=red]dom4j修改xml文件[/color] [url]http://lengchaotian.iteye.com/blog/1873658[/url]
用dom4j修改xml(增加修改节点)[url]http://bjyzxxds.iteye.com/blog/477226[/url]
dom4j修改节点属性及写入文件 [url]http://blog.163.com/sir_876/blog/static/1170522320107741950123/[/url]

maven:

<dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>




[color=red][b]Dom4j-XPath语法[/b][/color]


首先给出一段XML格式文本信息:


<?xml version="1.0" encoding="ISO-8859-1"?>


<bookstore>


<book>


<title lang="eng">Harry Potter</title>


<price>29.99</price>


</book>


<book>


<title lang="eng">Learning XML</title>


<price>39.95</price>


</book>


</bookstore>



表达式 描述


节点名 选择所有该名称的节点集


[color=darkblue]/ 选择根节点


// 选择当前节点下的所有节点


. 选择当前节点


.. 选择父节点


@ 选择属性


示例


表达式 描述


bookstore 选择所有bookstore子节点


/bookstore 选择根节点bookstore


bookstore/book 在bookstore的子节点中选择所有名为book的节点


//book 选择xml文档中所有名为book的节点


bookstore//book 选择节点bookstore下的所有名为book为节点


//@lang 选择所有名为lang的属性


断言


在方括号中[],用来更进一步定位选择的元素


表达式 描述


/bookstore/book[1] 选择根元素bookstore的book子元素中的第一个(注意: IE5以上浏览器中第一个元素是0)


/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个


/bookstore/book[last()-1] 选择根元素bookstore的book子元素中的最后第二个


/bookstore/book[position()<3] 选择根元素bookstore的book子元素中的前两个


//title[@lang] 选择所有拥有属性lang的titile元素


//title[@lang='eng'] 选择所有属性值lang为eng的title元素


/bookstore/book[price>35.00] 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的


/bookstore/book[price>35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素


选择位置的节点


通配符 描述


* 匹配所有元素


@* 匹配所有属性节点


node() 匹配任何类型的节点


示例


表达式 描述


/bookstore/* 选择根元素bookstore的下的所有子元素


//* 选择文档中所有元素


//title[@*] 选择所有拥有属性的title元素


使用操作符“|”组合选择符合多个path的表达式[/color]


xpath读取


private void getAllNodes(String xml) {
        try {
            Document authtmp = DocumentHelper.parseText(xml);
            List<Element> list = authtmp.selectNodes("//sms/node");
            for (int j = 0; j < list.size(); j++) {
                Element node = (Element) list.get(j);
                nodeByNodes(node);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void nodeByNodes(Element node) {
        if (node.element("node") != null) {
            String id = node.attributeValue("id");
            String name = node.attributeValue("name");
            System.out.print(id + "-------");
            System.out.println(name);
            for (Iterator i = node.elementIterator("node"); i.hasNext();) {
                Element newNode = (Element) i.next();
                nodeByNodes(newNode);
            }
        } else {
            String id = node.attributeValue("id");
            String name = node.attributeValue("name");
            System.out.print(id + "-------");
            System.out.println(name);
        }
    }




dom4j中文乱码


[url]http://blog.sina.com.cn/s/blog_3d25e30f0100cyzi.html[/url]


org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(


new [color=darkblue]FileOutputStream[/color](fileName));



dom4j读写xml文件


[url]http://www.blogjava.net/biiau/archive/2012/08/17/231005.html[/url]



写入


import java.io.FileWriter;  
import java.io.IOException;  

import org.dom4j.Document;  
import org.dom4j.DocumentHelper;  
import org.dom4j.Element;  
import org.dom4j.io.OutputFormat;  
import org.dom4j.io.XMLWriter;  

public class DWriter {  

    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        try {  
            XMLWriter writer = new XMLWriter(new FileWriter("src/author.xml"));  
            Document doc = createDoc();  
            writer.write(doc);  
            writer.close();  

            // Pretty print the document to System.out  
            // 设置了打印的格式,将读出到控制台的格式进行美化  
            OutputFormat format = OutputFormat.createPrettyPrint();  
            writer = new XMLWriter(System.out, format);  
            writer.write(doc);  

        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  

    public static Document createDoc() {  
        Document doc = DocumentHelper.createDocument();  
        Element root = doc.addElement("root");  
        Element author1 = root.addElement("author").addAttribute("name",  
                "Kree").addAttribute("location", "UK")  
                .addText("Kree Strachan");  
        Element author2 = root.addElement("author").addAttribute("name", "King")  
                .addAttribute("location", "US").addText("King McWrirter");  
        return doc;  
    }  
}



格式化代码:


OutputFormat format = OutputFormat.createPrettyPrint();  
writer = new XMLWriter(new FileWriter(filepath), format);