dom4j 的一些用法
使用domj4API创建与修改XML文档http://www.blogjava.net/tojava/archive/2005/12/20/24862.html
dom4j修改xml文件http://lengchaotian.iteye.com/blog/1873658
用dom4j修改xml(增加修改节点)http://bjyzxxds.iteye.com/blog/477226
dom4j修改节点属性及写入文件http://blog.163.com/sir_876/blog/static/1170522320107741950123/
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>
Dom4j-XPath语法
首先给出一段XML格式文本信息:
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<bookstore>
<book>
<titlelang="eng">HarryPotter</title>
<price>29.99</price>
</book>
<book>
<titlelang="eng">LearningXML</title>
<price>39.95</price>
</book>
</bookstore>
表达式描述
节点名选择所有该名称的节点集
/选择根节点
//选择当前节点下的所有节点
.选择当前节点
..选择父节点
@选择属性
示例
表达式描述
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的表达式
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中文乱码
http://blog.sina.com.cn/s/blog_3d25e30f0100cyzi.html
org.dom4j.io.XMLWriterxmlWriter=neworg.dom4j.io.XMLWriter(
newFileOutputStream(fileName));
dom4j读写xml文件
http://www.blogjava.net/biiau/archive/2012/08/17/231005.html
写入
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);