Dom4j

别说谁变了你拦得住时间么 提交于 2020-01-14 00:17:46

标题简介:

dom4j是一个叫dom4j的组织开发的用于解析xml的工具,开源的.
dom4j不是java自有功能,需要另外导包.
dom4j非常方便的对xml进行解析和增删查改操作,常用来对配置文件进行操作.
dom4j支持dom解析和sax解析方式.

常用方法:

// 获取解析器
SAXReader saxReader = new SAXReader();
// 获取文档
Document document = saxReader.read(“dom4j/person.xml”);
// 获取根元素
Element root = document.getRootElement();

Element的常用方法

List element.elements(""):获取所有的直接子元素
Element element.element(“name”):获取第一个名为name的直接子元素
List element.elements(“name”):获取名为name的直接子元素集合

element.addElement(“sex”):添加元素名为sex的子元素
element.setText(“文本内容”):设置该元素的值
element.getText():获取该元素的文本值
element.getParent().remove(element):通过获取父元素删除元素.
element.add(Attribute):添加属性
element.add(Text):添加文本
element.attribute(int):获取第几个属性
element.attribute(String):通过属性名获取属性
element.attributeValue(String) String:通过属性名获取属性值

Document工具类:DocumentHelper

Element createElement = DocumentHelper.createElement(“name”):创建name元素
DocumentHelper.createAttribute(createElement, “age”, “20”):在createElement创建属性age,值为20
DocumentHelper.createText(“20”):创建文本20

将修改的xml输出到文件中

XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(“dom4j/person3.xml”));
将修改的xml输出到文件中,带格式输出,createPrettyPrint为带缩进输出,createCompactFormat为紧凑不缩进输出
OutputFormat还可以设置一些输出参数,如编码格式.
OutputFormat format = OutputFormat.createPrettyPrint();
OutputFormat format = OutputFormat.createCompactFormat();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(“dom4j/person3.xml”), format);
执行写操作
xmlWriter.write(document);
XMLWriter也是一种流,需要关闭以释放资源
xmlWriter.close();

Dom4j对XPath的支持

需要另外支持包,如:jaxen-1.1-beta-6.jar
返回xpath表达式的所有元素
List document.selectNodes(表达式);
返回xpath表达式的一个元素
document.selectSingleNode(表达式);

xpath表达式

/:根节点
//:文档中所有节点匹配条件
.:当前节点
…:父节点
@:属性

通配符:
:所有节点
@
:所有属性
node():任何节点

/AAA/BBB/CCC:根目录下AAA元素下的BBB元素下的CCC元素
//AAA:所有AAA元素
//name[@id]:具有id属性的所有name元素
//name[@id=‘ls’]:具有id属性并且值为ls的所有name元素
//name[1]:第一个name属性
//name[last()]:最后一个name属性

具体可以参考w3cSchool中XPath的语法:
https://www.w3school.com.cn/xpath/xpath_syntax.asp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!