DOM4J解析XML
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
Document document = DocumentHelper.createDocument();
//创建根节点
Element root = document.addElement("members");
节点对象:
Element root = document.getRootElement();
Element element=node.element(“书名");
String text=node.getText();
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
Element element = (Element) it.next();
// do something
}
6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");
element.setText("29");
//childElm是待删除的节点,parentElm是其父节点
parentElm.remove(childElm);
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
Element root=document.getRootElement();
//属性名name
Attribute attribute=root.attribute("size");
2.取得属性的文字
Attribute attribute=root.attribute("size");
root.remove(attribute);
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
5.设置某节点的属性和文字.
6.设置属性的文字
attribute.setText("sitinspring");
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.
// 指定XML编码
format.setEncoding("GBK");
XMLWriter
writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
字符串与XML的转换 :
String text = "<members> <member>sitinspring</member></members>";
Document document = DocumentHelper.parseText(text);
2.将文档或节点的XML转化为字符串.
SAXReader reader = new SAXReader();
Document document = reader.read(new
File("input.xml"));
Element root=document.getRootElement();
String docXmlText=document.asXML();
String rootXmlText=root.asXML();
Element memberElm=root.element("member");
String memberXmlText=memberElm.asXML();
首先需要导入这两个jar包:
第一个是必须的,第二个是为后边使用XPath使用的。
对XML文档的CRUD操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | package com.dom4j.cn; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class Dom4JDemo { /* * 读取指定标签的内容,以及他的属性 */ @Test public void read1() throws DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read( "src/book.xml" ); Element root = document.getRootElement(); Element book = (Element) root.elements( "书" ).get( 0 ); String value = book.element( "书名" ).getText(); System.out.println( "标签内容:" + value); Attribute attr = book.element( "书名" ).attribute( "name" ); System.out.println( "标签属性 : " + attr.getName() + " 属性内容 : " + attr.getText()); } /* * 在标签末尾添加标签 */ @Test public void add1() throws DocumentException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read( "src/book.xml" ); Element root = document.getRootElement(); Element book = root.element( "书" ); book.addElement( "售价" ).setText( "100005415" ); //利用Format解决乱码问题。 注意XMLWriter的第一个参数要使用字节流 //如果它使用字符流的话,那么一定要指定该字符流的码表与format的一致 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding( "UTF-8" ); XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ), format); writer.write(document); writer.close(); /* * 字符流的形式 */ /*OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"), format); writer.write(document); writer.close();*/ } /* * 在指定标签的后边添加标签 */ @Test public void add2() throws DocumentException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read( "src/book.xml" ); Element root = document.getRootElement(); Element book = root.element( "书" ); List list = book.elements(); Element price = DocumentHelper.createElement( "加价" ); price.setText( "500" ); //设置新标签的内容 price.addAttribute( "ok" , "yes" ); // 设置新标签的属性 list.add( 2 , price); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding( "UTF-8" ); XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ), format); writer.write(document); } /* * 删除指定标签 或者 属性 */ @Test public void delete() throws DocumentException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read( "src/book.xml" ); Element root = document.getRootElement(); //删除标签 /*Element price = root.element("书").element("售价"); price.getParent().remove(price);*/ Element bookName = root.element( "书" ).element( "书名" ); bookName.remove(bookName.attribute( "name" )); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding( "UTF-8" ); XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ), format); writer.write(document); } /* * 更新指定标签内容或者属性 */ @Test public void update() throws DocumentException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read( "src/book.xml" ); Element root = document.getRootElement(); //更新标签内同 // root.element("书").element("书名").setText("欧亚"); //更新标签属性 root.element( "书" ).element( "书名" ).attribute( "name" ).setText( "qqqq" ); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding( "UTF-8" ); XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ), format); writer.write(document); } } |
XMLPath类似于正则有非常强大的功能来取标签, 这里简单模拟一个登陆判断用户名密码的。 可以查看API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.dom4j.cn; import java.io.File; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Node; import org.dom4j.io.SAXReader; public class XMLPathDemo { public static void main(String[] args) throws DocumentException { String username = "aa" ; String password = "111" ; SAXReader reader = new SAXReader(); Document document = reader.read( new File( "src/users.xml" )); Node node = document.selectSingleNode( "//user[@username='" +username+ "' and @password='" +password+ "']" ); if (node == null ) { System.out.println( "用户名密码错误" ); } else { System.out.println( "登陆成功" ); } } } |
XPathAPI :http://pan.baidu.com/s/1i3zDpNv
DOM4J jar包: http://pan.baidu.com/s/1sj6O5R3 http://pan.baidu.com/s/1c0Fw81a
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用