JavaHigh07-xml结构简介和dom4j常用操作

dom4j简介

1、标签是什么

手动闭合标签:
<tagName attr="v1" attr2="v2">
	//嵌套文本内容
    text
    //嵌套子标签
    <subTag>...</subTag>
</tagName>
自闭合标签只有属性:

<tagName attr="v1" attr2="v2" />

2、xml文档结构

必须有一个唯一的根标签,文档结构是树形,一般只有叶子节点存text

image-20210129151459604

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>

猜你喜欢

转载自blog.csdn.net/xiaoxaoyu/article/details/113532234