XPath解析xml

2023-03-01  本文已影响0人  牵手生活

Java 解析xml常用的方式:

1:dom解析XML:它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作。--耗内存
2:SAX(Simple API for XML)解析XML:SAX不用将整个文档加载到内存,基于事件驱动的API(Observer模式),他按照xml文件的顺序一步一步的来解析,用户只需要注册自己感兴趣的事件即可。SAX没有文档修改、随机访问及输出的功能
3:JDOM解析XML
4:DOM4j解析XML

详细参考:http://www.51gjie.com/java/739.html


付:java常用dom4j简单生成XML文件

下面采用dom方式解析

Java XPath解析XML总结-XPath解析XML步骤

XPath 语法-w3school

Java XML解析 - 利用dom(org.w3c.dom)解析XML

下面解析memberlist 下的成员

xml文本


<sysmsg type="sysmsgtemplate">
    <sysmsgtemplate>
        <content_template type="tmpl_type_profile">
            <plain><![CDATA[]]></plain>
            <template><![CDATA["$ownername$"已成为新群主]]></template>
            <link_list>
                <link name="ownername" type="link_profile">
                    <memberlist>
                        <member>
                            <username><![CDATA[youngcat]]></username>
                            <nickname><![CDATA[牵手可能2]]></nickname>
                        </member>
                        <member>
                            <username><![CDATA[makeboluo]]></username>
                            <nickname><![CDATA[马可波罗]]></nickname>
                        </member>
                    </memberlist>
                </link>
            </link_list>
        </content_template>
    </sysmsgtemplate>
</sysmsg>

解析代码


    @Test
    public void testParase_sysmsg_roomOpt2() throws XPathExpressionException {

        XPathFactory pathFactory = XPathFactory.newInstance();
        XPath xpath = pathFactory.newXPath();

        InputStream in =getClass().getResourceAsStream("/msg_sysmsg_roomAcceptedNewOwner_field_content_2.txt");
        InputSource source = new InputSource( in ); //InputSource使用一次就会关闭,再次使用就用再new一次。

        //String query_sentences = "/sysmsg/sysmsgtemplate/content_template";
        //String query_sentences = "/sysmsg/sysmsgtemplate/content_template/link_list/link/memberlist/member";
        String query_sentences = "/sysmsg/sysmsgtemplate/content_template/link_list/link/memberlist/member";
        Object result = xpath.evaluate(query_sentences,source, XPathConstants.NODESET);
        NodeList nodes_member = (NodeList) result;

        List memberList = new ArrayList();

        for (int i = 0; i < nodes_member.getLength(); i++) {//????如何去除Node中的值呢?
            Map<String,Object> map_member = new HashMap<>();
            Node node_member = nodes_member.item(i);


            Element element = (Element) nodes_member.item(i);
//            System.out.println("username: " + element.getElementsByTagName("username").item(0).getFirstChild().getNodeValue());
//            System.out.println("nickname: " + element.getElementsByTagName("nickname").item(0).getFirstChild().getNodeValue());

            map_member.put("username",element.getElementsByTagName("username").item(0).getFirstChild().getNodeValue());
            map_member.put("nickname",element.getElementsByTagName("nickname").item(0).getFirstChild().getNodeValue());

            memberList.add(map_member);

        }

        System.out.println(new Gson().toJson(memberList));





    }

测试代码效果

image.png
上一篇下一篇

猜你喜欢

热点阅读