http://wenku.baidu.com/view/77a2181e10a6f524ccbf854b.html dom4j_API
http://wenku.baidu.com/view/7b1b3f79168884868762d607.html
http://www.cnblogs.com/shitianzeng/articles/2518323.html
http://www.cnblogs.com/shitianzeng/articles/2518323.html
一.Document对象相关
1.读取XML文件,获得document对象.
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");// 创建根节点
二.节点相关
1.获取文档的根节点.
Element rootElm = document.getRootElement();
2.取得某节点的单个子节点.
Element memberElm=root.element("member");// "member"是节点名
3.取得节点的文字
String text=memberElm.getText();
也可以用:
String text=root.elementText("name");这个是取得根节点下的name字节点的文字.
4.取得某节点下名为"member"的所有字节点并进行遍历.
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
5.对某节点下的所有子节点进行遍历.
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}
6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");
7.设置节点文字.
ageElm.setText("29");
8.删除某节点.
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点
三.属性相关.
1.取得某节点下的某属性
Element root=document.getRootElement();
Attribute attribute=root.attribute("size");// 属性名name
2.取得属性的文字
String text=attribute.getText();
也可以用:
String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.
3.遍历某节点的所有属性
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
4.设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
5.设置属性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
6.删除某属性
Attribute attribute=root.attribute("size");// 属性名name
root.remove(attribute);
四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 指定XML编码
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
writer.write(document);
writer.close();
五.字符串与XML的转换
1.将字符串转化为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();
六.使用XPath快速找到节点.
读取的XML文档示例
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>MemberManagement</name>
<comment></comment>
<projects>
<project>PRJ1</project>
<project>PRJ2</project>
<project>PRJ3</project>
<project>PRJ4</project>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
使用XPath快速找到节点project.
public static void main(String[] args){
SAXReader reader = new SAXReader();
try{
Document doc = reader.read(new File("sample.xml"));
List projects=doc.selectNodes("/projectDescription/projects/project");
Iterator it=projects.iterator();
while(it.hasNext()){
Element elm=(Element)it.next();
System.out.println(elm.getText());
}
}
catch(Exception ex){
ex.printStackTrace();
}
例子:
package com.stz;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
import java.util.List;
public class TestDate {
public static void main(String[]args){
String xml="<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<students>"+
" <student id=\"1\">"+
" <name>stz</name>"+
" <age>23</age>"+
"</student>"+
"<student id=\"2\">"+
"<name>rhl</name>"+
"<age>23</age>"+
"</student>"+
"<student id=\"3\">"+
" <name>tom</name>"+
" <age>23</age>"+
"</student>"+
"</students>";
try {
Document document=DocumentHelper.parseText(xml);
Element root=document.getRootElement();
//System.out.println(ele.e);
//List nodes=root.elements("student");
//System.out.println(root.getName());
//root.elementIterator();
List nodes=document.selectNodes("/students/student");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
System.out.println("id:"+elm.attributeValue("id"));
System.out.println(elm.getName());
Element eles=elm.element("name");
System.out.println(eles.getText());
Element elea=elm.element("age");
System.out.println(elea.getText());
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相关推荐
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d- %c -%-4r [%t] %-5p %c %x - %m%n ``` 在 SecureCRT 环境中配置 JDK 需要满足一定的条件,并且需要注意一些细节问题。同时,写一个 Java 程序来...
【标题】: 基于Linux的应用程序交叉编译 【正文】: 交叉编译是开发嵌入式系统中的一个重要环节,它允许开发者在一种架构的计算机上(如个人电脑)构建适用于另一种架构(如ARM处理器)的软件。...
【思科PPP配置】是网络通信中的重要环节,主要用于路由器之间的点对点连接。PPP(Point-to-Point Protocol)协议是一种在两个直接相连的设备之间建立网络连接的标准协议,广泛应用于广域网(WAN)中,如Dial-up、...
本手册是根据Melexis 的MLX90614 数据手册Rev008翻译而来,仅供用户参考所用,传感器所有数据及...
本人亲自呕心吐血整理出史上最全的Halcon算子中英...Segmentation,System,Tools,Tuple,XLD。 绝对物超所值啊。
是面向全球市场TDD-LTE/FDD-LTE/WCDMA/TD-SCDMA/EVDO/CDMA1X/GSM 七种网络制式的...
该版本软件能成功安装,安装详细请看我的博客文章"安装arm-linux-insight".
Node.js-12.x 纱线-1.17.x 使用ライブラリ vue-2.6.x @ storybook / vue-6.0.x @ storybook / addon-actions-6.0.x @ storybook / addon-controls-6.0.x @ storybook / addon-docs-6.0.x @ storybook / addon-...
本文档是从官方版本的数据库xml整理并用工具转换出来的,和最新版本有差异,但还是值得参考的
假设要计算序列x(n)=u(n)-u(n-L),0≤n≤L 和h(n)=cos(0.2πn),0≤n≤M的线性卷积,完成以下实验内容: (1)设 L=M,根据线性卷积的表达式和快速卷积的原理,分别编程实现计 算两个序列线性卷积的方法; (2)...
该程序返回关联拉盖尔多项式 L_{n,m} 的系数,给定非负整数 n 和 m,其中 m <= n。 当 m=0 时,这是拉盖尔多项式 L_n。 polyval(AssociatedLaguerrePoly(n,m),x) 评估 L_{n,m}(x)。
\qquad现有一个求稀疏编码的问题: min∥z∥0s.t. x=Dz \min \parallel z \...\qquad 解决上式是一个复杂度随 m 以指数级增长的组合问题,最常见的解决方法是将 l0l_0l0 范数替换为 l1l_1l1范数.即目标函数
标题中的`cte_propag_impedancia(R,L,G,C,omega)`函数显然就是这样一个工具,它用于计算电路的复数阻抗,其中参数`R`代表电阻,`L`代表电感,`G`代表导纳(电导的倒数,与电阻相反),`C`代表电容,而`omega`则表示...
罗马数字是一种古老的计数系统,其符号包括 I, V, X, L, C, D, M。编写一个 Ruby 函数来实现罗马数字和整数之间的转换是一项常见的 Kata。这个 kata 要求你理解罗马数字的规则,如 I 在 V 前面表示 4,X 在 L 前面...
因为get_dpkg的名称是从dpkg -l收集信息。 更多例子 试试这个: python -m remote -x -n sudo -m host1,host2 'hwinfo.all_info()' 它将打印有关远程计算机的所有信息。 -x用于评估模式。 结果将返回并以json...
对于两条直线 \( L_1 \) 和 \( L_2 \),它们分别由点 \( P_1(x_1, y_1) \) 和 \( Q_1(x_2, y_2) \) 以及点 \( P_2(x_3, y_3) \) 和 \( Q_2(x_4, y_4) \) 定义,我们可以根据这些点构建出两条直线的方程。 为了找到...
**二分法(Bisection Method)是一种数值分析中的搜索算法,用于求解方程的根...此外,虽然二分法简单且稳定,但它不是最快速的根查找算法,比如牛顿法和二分法的变种(如false position method)可能更快地收敛到根。