Jdom对xml文档进行解析、生成、序列化等各种操作。
使用jdom之前,首先要导入jar包:jdom.jar
获得根元素:
- 首先确定xml文件位置
String xmlPath = "./src/ceshi/Test.xml";
//使用的解析器,这里表示默认的解析器
SAXBuilder builder = new SAXBuilder(false);
try {
//得到Document,以后的操作都是Document操作的
Document document = builder.build(xmlPath);
//得到根元素
Element root = document.getRootElement();
} catch (JDOMException e) {
e.printStackTrace();
}
Jdom得到的所有的节点,都是org.jdom.Element类,他的子节点也是org.jdom.Element类,得到的root是Element对象,直接输出System.out.println(root);显示:
[Element: <books/>]
- Element的常用方法:
1、String getName() 返回Element类的名称
System.out.println(root.getName()); 结果 :books
2、String getAttributeValue(Stringname) 获得属性值
System.out.println(root.getAttributeValue("size")); 结果:3
3、setAttribute(String name,String value) 设置属性值
4、removeAttribute(String name) 删除属性
5、getAttributes().clear() 清空所有属性
6、String getText() 获得Element(当前节点)的值,当前节点必须是最后一级节点,否则返回空。
7、String getTextTrim() 与getText()相同,只是去掉两边的空格
8、String setText(String name) 改变Element(当前节点)的值,当前节点必须是最后一级节点。这个只是对document的修改,并没有对实际的xml文档修改。若要修改实际的文档,需要使用XMLOutputter:
XMLOutputter outputter=new XMLOutputter();
outputter.output(document,new FileOutputStream(xmlPath));
9、Element getChild(String name) 获得指定名称的第一个元素
10、 removeChildren(String name) 删除名称为name的子元素
11、 addContent(Element e) 增加节点
- 获得子元素值:
//获得根元素
输出为:
Elementroot = document.getRootElement();
//通过根元素,获得book元素
Elementbook = root.getChild("book");
//获得book元素的name节点的值(name节点必须为最底层元素,否则返回空)
System.out.println(book.getChildTextTrim("name"));
java开发
getChild()获得的是第一个元素。
获得所有属性:
节点可以获得自己的属性,对所有的属性进行遍历,然后转换为属性类型:
Attribute att = (Attribute) root.getAttributes().get(0);
//获得属性名称
System.out.println(att.getName());
//获得属性值
System.out.println(att.getValue());
- 获得子节点集合:
1、 获得所有子节点
List childrens =root.getChildren();
for(int i=0;i<childrens.size();i++){
System.out.println(childrens.get(i));
}
通过root.getChildren()得到的是一个List集合,集合中是Element对象:
[Element: <book/>]
[Element: <book/>]
[Element: <book/>]
得到的集合中的Element对象,需要进行类型转换才能作为Element操作:
Element child0 = (Element) childrens.get(0);
System.out.println(child0.getName());
例如,对books所有子节点book遍历属性:
List childrens = root.getChildren();
for(inti=0;i<childrens.size();i++){
Element child= (Element) childrens.get(i);
System.out.println(child.getAttributeValue("author"));
}
2、 获得指定名称的子节点
可以通过名称获得子节点,得到的同样是Element集合,并且是所有的名称为“name”的集合:
List childrens = book.getChildren("name");
生成xml文档:
使用java定义各个节点以及属性,然后生成xml文档:
//定义所有节点
Element root,student,number,name,age;
Element student2,number2,name2,age2;
//生成根元素:student-info
root = new Element("student-info");
//生成元素:student(number,name,age)
student = new Element("student");
number = new Element("number");
name = new Element("name");
age = new Element("age");
//生成元素:student2(number,name,age)
student2 = new Element("student2");
number2 = new Element("number2");
name2 = new Element("name2");
age2 = new Element("age2");
//将根元素植入文档doc中
Document doc = new Document(root);
//分别将两个student赋值,然后分别加载到root上
number.setText("001");
name.setText("zs");
age.setText("24");
number2.setText("002");
number2.setAttribute(new Attribute("name","fxt"));//属性
name2.setText("ls");
age2.setText("50");
student.addContent(number);
student.addContent(name);
student.addContent(age);
student2.addContent(number2);
student2.addContent(name2);
student2.addContent(age2);
root.addContent(student);
root.addContent(student2);
//定义格式:字符为gb2312,缩进为4个空格(若Format报错,说明版本太低,下载最 新jdom.jar即可)
Format format = Format.getCompactFormat();
format.setEncoding("gb2312");
format.setIndent(" ");
//输出新文件,若已存在,则覆盖
XMLOutputter XMLOut = new XMLOutputter(format);
XMLOut.output(doc, new FileOutputStream("./src/ceshi/jdomTest2.xml"));