美文网首页
XPath解析xml

XPath解析xml

作者: 牵手生活 | 来源:发表于2023-03-01 14:59 被阅读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

    相关文章

      网友评论

          本文标题:XPath解析xml

          本文链接:https://www.haomeiwen.com/subject/mhtdldtx.html