XML的解析总结

XML的解析总结

1 dom4j解析xml

0 dom4j简介

使用DOM思想,读取xml文件

1 SAXReader

方法:

  • read(输入流) 读取xml文件,返回文档对象,返回值是Document对象

2 Document

方法:

  • getRootElement()获取文档的根标签,返回值是标签对象Element

3 Element

方法:

  • elements() 获取所有子标签,返回值子标签集合List<Eelement>
  • attributeValue(String 属性名) ,返回值属性值
  • getText() 返回值标签体的文本部分

1 导入maven坐标

    <dependencies>
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.2.0</version>
        </dependency>
    </dependencies>

2 在src/resources目录下创建demo.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean id="0001" className="cn.cf.demo.person">
        <property name="user" value="jack">杰克</property>
        <property name="user" value="rose">肉丝</property>
    </bean>

    <bean id="0002" className="cn.cf.demo.Admin">
        <property name="user" value="admin">管理员</property>
        <property name="user" value="write">怀特</property>
    </bean>
</beans>

3 在src/java目录下创建DemoDom4j.java文件

public class DemoDom4j {

    public static void main(String[] args) throws DocumentException {
		//根路径获取资源,转换为流
        InputStream in = DemoDom4j.class.getClassLoader().getResourceAsStream("demo.xml");

        System.out.println(in);
        //创建SaxReader
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(in);
        //获取根标签
        Element rootElement = document.getRootElement();
        //获取根标签下的所有子标签
        List<Element> elements = rootElement.elements();
        //遍历
        for (Element element : elements) {
            String id = element.attributeValue("id");
            String className = element.attributeValue("className");
            System.out.println(id+"...."+className);

            //
            List<Element> elements1 = element.elements();
            //遍历
            for (Element element1 : elements1) {
                String name = element1.attributeValue("name");
                String value = element1.attributeValue("value");
                //获取文本
                String text = element1.getText();
                System.out.println(name+".."+value+".."+text);
            }

        }



    }
        /* 输出结果        
        java.io.BufferedInputStream@5010be6
        0001....cn.cf.demo.person
        user..jack..杰克
        user..rose..肉丝
        0002....cn.cf.demo.Admin
        user..admin..管理员
        user..write..怀特
        */  

2 xpath查找xml

0 xpath简介

XPath 是一门在 XML 文档中查找信息的语言。

1 选取节点

表达式说明
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.选取当前节点
选取当前节点
@选取当前节点

2 选取未知节点

表达式说明
*匹配任何元素节点
@*匹配任何属性节点
node()匹配任何类型的节点

1 导入maven坐标

同上.

2 在src/resources目录下创建demo2.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student number="001">
        <name id="rose">
            <xing></xing>
            <ming></ming>
        </name>
        <age>18</age>
        <sex></sex>
    </student>

    <student number="002">
        <name>Mary</name>
        <age>28</age>
        <sex></sex>
    </student>
</students>

3 在src/java目录下创建DemoXpath.java文件

public class DemoXpath {

    public static void main(String[] args) throws DocumentException {
        //获取xml对应的字节流
        InputStream in = DemoXpath.class.getClassLoader().getResourceAsStream("demo2.xml");
        System.out.println(in);
        //创建SaxReader
        SAXReader saxReader = new SAXReader();
        //将流对象读到内存中,得到Document对象
        Document document = saxReader.read(in);

        //获取根标签
        Element rootElement = document.getRootElement();

        //获取所有的age
        List<Node> list = rootElement.selectNodes("/students/student/age");
        System.out.println(list);

        //获取标签sex,xpath中常用的形式//sex
        List<Node> nodes = rootElement.selectNodes("//sex");
        System.out.println(nodes);
        //获取第一个sex
        Node node = rootElement.selectSingleNode("//sex");
        System.out.println(node);

        //获取第一个sex标签中的文本
        Element element = (Element) rootElement.selectSingleNode("//sex");
        System.out.println(element.getText());

        //获取标签的name,属性id,只要有这个属性就可以获取
        List<Node> nodeList = rootElement.selectNodes("//name[@id]");
        System.out.println(nodeList.size());
        System.out.println(nodeList);

    }
}
/*

        java.io.BufferedInputStream@5010be6
        [org.dom4j.tree.DefaultElement@51016012 [Element: <age attributes: []/>], org.dom4j.tree.DefaultElement@29444d75 [Element: <age attributes: []/>]]
        [org.dom4j.tree.DefaultElement@2d6d8735 [Element: <sex attributes: []/>], org.dom4j.tree.DefaultElement@6979e8cb [Element: <sex attributes: []/>]]
        org.dom4j.tree.DefaultElement@2d6d8735 [Element: <sex attributes: []/>]
        女
        1
        [org.dom4j.tree.DefaultElement@5b1d2887 [Element: <name attributes: [org.dom4j.tree.DefaultAttribute@3ac42916 [Attribute: name id value "rose"]]/>]]
*/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值