文章目录
dom4j简介
1、标签是什么
手动闭合标签:
<tagName attr="v1" attr2="v2">
//嵌套文本内容
text
//嵌套子标签
<subTag>...</subTag>
</tagName>
自闭合标签只有属性:
<tagName attr="v1" attr2="v2" />
2、xml文档结构
必须有一个唯一的根标签,文档结构是树形,一般只有叶子节点存text
3、示例文件
<student>
<student stuNo="1001">
<name>zhangsan</name>
<age>19</age>
<gender>男</gender>
</student>
<student stuNo="1002">
<name>lisi</name>
<age>21</age>
<gender>男</gender>
</student>
<student stuNo="1003">
<name>wangwu</name>
<age>19</age>
<gender>女</gender>
</student>
<temp>
<name>zhaoliu</name>
<age>16</age>
<gender>男</gender>
</temp>
</student>
4、读
4.1 初始化
读xml文档:private SAXReader sr;
文档对象:private Document doc;
唯一的根:private Element root;
输出格式:private OutputFormat format;
输出xml文档xml文档,这个不需要初始化:private XMLWriter writer;
4.2 获取一级子元素
获取root节点查所有一级子元素:List<Element> els = root.elements();
4.3 解析单个节点:Element el = …
获取元素的名称:String tagName = el.getName();
获取元素的文本:String text = el.getText();
获取元素的属性值:String attrVal = el.attributeValue(String attributeName);
获取元素的某子元素文本:String subText = el.element(String subTagName);
获取元素的某子元素:Element subElement = el.element(String subTagName);
获取元素的所有子元素:List<Element> subElements = el.elements();
4.4 检索节点集合:Element root/el = …
获取第一个找到的节点:Node node =el.selectSingleNode(String path);
获取所有匹配到的节点List<Node> nodes = el.selectNodes(String path);
4.5 检索节点的xpath路径写法([]是条件,【】是内容)
可以使用通配符*代表一层任意元素:String path = "/root/sub1/*/sub3";
名称符合的任意层都可以:String path = "//elementName";
查找特定属性的值:String path = ".../【elementName】[@attr='value']";
查找文本特定的值:String path = ".../【elementName】[text()='value']";
复杂条件查找,查找指定名称下的元素:String path = ".../【elementName】[name[@attr='value']text()='value']";
5、增删改
5.1 添加节点:Element el = …
创建节点名称在内存中,如果是多层节点,后面继续addElement即可:Element subElement = el.addElement(String subName);
设置标签属性:el.addAttribute(String attrName,String attrValue);
设置添加的内容:el.setText(String txt);
5.2 修改节点:修改之前,根据属性值查找到该节点
修改属性:el.attribute(String attr).setValue(String text);
修改内容:el.element(String subTagName).setText(String text);
5.3 删除节点:删除之前,根据属性值查找到该节点
先找到其父节点,然后删除:el.getParent().remove(el)
5.4 存盘
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("path"),format);
writer.write(Document doc);
writer.close();
6、pom依赖
<!-- dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>