jdom解析XML

jdom利用纯java技术对xml文档进行解析、生成、序列化等各种操作。

使用jdom之前,首先要导入jar包:jdom.jar 

获得根元素:

//首先确定xml文件位置
		String xmlPath = "./src/ceshi/jdomTest.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")); 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值