基本概念:XML(eXtensibleMarkuLanguage),是一种可扩展的标记语言,类似HTML(超文本标记语言)
前期工作:下载dom4j的jar包(我使用的是1.6.1版本)jar在ecse中导入jar包
准备好一个需要解析的xml文件
创建SAXReader对象,读取xml文件
调用ad方法,返回document对象
获取文档中元素
注意:创建的工程千万千万别写中文,今天因为创建工程时图方便直接写了(xml解析)然后报错找了接近一个小时,在网上百度各种方式,(编码格式等等)全都没解决,最后才发现是自己路径有(解析)两个中文
下图是需要解析的xml文件直接上代码
将每个方法中需要用的定义成全局常量
Filefile=null;
SAXReadersaxReader=null;
Documentdoc=null;
Elementcontacts=null;
@Befo
ubcvoidtestBefo()throwsExcetion{
首先获取xml路径
file=newFile("xmlcontacts.xml");
System.out.rintln(file.getAbsutePath());得到绝对路径
然后创建SAXReader对象
saxReader=newSAXReader();
System.out.rintln(saxReader);
之后调用ad方法,传入需要解析的xml文件
doc=saxReader.ad(file);
System.out.rintln(doc);
System.out.rintln(contacts);
contacts=doc.getRootElement();得到xml的根节点
System.out.rintln(contacts);
}查询该xml的元素
@Test
ubcvoidtestQuery()throwsExcetion{查询方法
List<Element>nkmans=contacts.elements();
判断大小大于0表示有下一级元素
if(nkmans.size()>0&am;&am;nkmans!=null){
遍历获取到nkmans下的所有子元素
for(Elementnkman:nkmans){
获取nkman的属性和属性值
Attributeattr=nkman.attribute("id");
System.out.rintln(attr.getName()+attr.getText());
List<Element>elements=nkman.elements();
if(elements.size()>0&am;&am;elements!=null){
for(Elementelement:elements){
得到子节点所有的元素和值
System.out.rintln(element.getName()+element.getText());
}
}
}
}
取第一个nkman节点
Elementelement=nkmans.get(0);
System.out.rintln(element.element("name").getText());取第一个节点中子节点name元素的值
}修改方法
@Test
ubcvoidtestUdata()throwsExcetion{
List<Element>nkmans=contacts.elements();
Elementname=nkmans.get(0).element("name");获取第一个nkman节点下的name节点元素然后修改该值
name.setText("豆豆");
}
修改完后会保存在内存中必须执行写入步骤
@After
ubcvoidtestAfter()throwsExcetion{
**
*FileWriterout=newFileWriter(file);doc.write(out);out.close();
*
以漂亮的方式进行输出
OututFormatformat=OututFormat.catePttyPrint();
format=OututFormat.cateComactFormat();这是以紧凑的方式输出
XMLWriterxmlWriter=newXMLWriter(newFileWriter(file),format);
xmlWriter.write(doc);
xmlWriter.close();
}结果增加的方式:
@Test
ubcvoidtestAdd()throwsExcetion{
Elementadd=contacts.addElement("nkman");增加根节点下的一级节点
add.setAttributeValue("id","values");给一级节点添加标签
Elementname=add.addElement("name");在一级节点下增加二级节点
name.setText("小周");设置值
add.addElement("email").setText("zhouc@qq.com");
add.addElement("addss").setText("重庆");
}删除方式:
@Test
ubcvoidtestDelete()throwsExcetion{
List<Element>elements=contacts.elements();
Elementnkman=elements.get(0);得到第一个nkman
Elementname=nkman.element("name");
name.getPant().move(name);删除第一个nkman下的name
nkman.getPant().move(nkman);删除整个nkman
注意删除节点时需要找到删除节点的父级节点,然后在进行删除 }