Java dom4j解析xml

dom4j的api接口描述
Nodedom4j树中所有节点的接口
Elementxml元素
Doucumentxml文档
Attributexml元素属性
DocumentTypexml文档中DOCTYPE声明
CDATAxml文档中的CDATA段
Textxml中的文本内容
Commentxml文档注释内容

read 提供多种读取xml文件的方式,返回一个Domcument对象
getRootElement 获取根节点
getName 获取node名字,例如获取根节点名称为bookstore
getNodeType 获取node类型常量值,例如获取到bookstore类型为1——Element
getNodeTypeName 获取node类型名称,例如获取到的bookstore类型名称为Element
attributes 返回该元素的属性列表
attributeValue 根据传入的属性名获取属性值
elementIterator 返回包含子元素的迭代器
elements 返回包含子元素的列表
getName 获取属性名
getValue 获取属性值
getText 获取Text节点值

/**
 * dom4j是一个第三方开源的库。使用dom4j解析xml需要导入dom4j的jar包。
 */
public class Test2 {
	public static void main(String[] args) throws Exception {
		ReadXml("books.xml");//读取xml
		ChangeAndWriteXml();//更改xml
		ReadXml("books2.xml");//读取更改后的xml
	}
	private static void ChangeAndWriteXml() throws Exception {
		SAXReader reader = new SAXReader();
		//得到document
		Document doc = reader.read(new File("books.xml"));
		//得到根节点
		Element root = doc.getRootElement();
//在element(Book)这个节点下添加子节点
		Element element=root.element("Book");
	    Element elm = element.addElement("折扣");
	    elm.setText("9");
//修改节点
	    //修改节点名
	    element.setName("Book1");
	    System.out.println( element.getName() );
	    //修改节点值
	    Element price = element.element("price");
	    price.setText("300");
	    
删除节点
	    Element Book = root.element("Book");
	    root.remove(Book);
	    
//再修改之后需要将修改的写入新的xml文件或进行回写
//将文档写入xml文件
//		    //文档中全为英文,不设置编码,直接写入的形式.
//		    XMLWriter writer = new XMLWriter(new FileWriter("ot.xml"));
//		    writer.write(document);
//		    writer.close();
		    //文档中含有中文字符需要设置文档编码
		    OutputFormat format = OutputFormat.createPrettyPrint(); // 创建文件输出的时候,自动缩进的格式   
		    format.setEncoding("UTF-8");//设置编码  
		    XMLWriter writer;
			try {
				writer = new XMLWriter(new FileWriter("books2.xml"),format);
				writer.write(doc);
			    writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			doc = reader.read(new File("books2.xml"));
	}

	private static void ReadXml(String url) throws Exception {
		SAXReader reader = new SAXReader();
		//得到document
		Document doc = reader.read(new File(url));
		//得到根节点
		Element root = doc.getRootElement();
		//得到book
		List<Element> list=root.elements("book");
//		设置一个迭代器,来循环获取根节点中的信息
		Iterator<Element> it = root.elementIterator();
		while( it.hasNext() ) {
			Element element = it.next();
			//得到element下的属性名称和属性值
			List<Attribute> bookAttrs = element.attributes();
            for (Attribute attr : bookAttrs) {
                System.out.println("属性名:" + attr.getName() + "--属性值:"
                        + attr.getValue());
            }
			//获取element下的节点名称和节点值
			for( Element e:element.elements() ) {
				System.out.println( "节点名:"+e.getName()+"--数据:"+e.getText() );
			}
		}
	}
}

以下是xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<Books>
<Book id="1">
	<bname>java从入门到放弃</bname>
	<author>nicky</author>
	<isbn>7-456-3278</isbn>
	<price>9.9</price>
</Book>
<Book id="2">
	<bname>mysql从删库到跑路</bname>
	<author>lq</author>
	<isbn>7-456-3278</isbn>
	<price>9.9</price>
</Book>
</Books>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huathy-雨落江南,浮生若梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值