Java dom4j解析xml

dom4j的api接口 描述
Node dom4j树中所有节点的接口
Element xml元素
Doucument xml文档
Attribute xml元素属性
DocumentType xml文档中DOCTYPE声明
CDATA xml文档中的CDATA段
Text xml中的文本内容
Comment xml文档注释内容

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>
发布了40 篇原创文章 · 获赞 16 · 访问量 8660

猜你喜欢

转载自blog.csdn.net/qq_40366738/article/details/100746947