未知昵称 2019-06-10 14:42 采纳率: 66.7%
浏览 1753
已采纳

java 用dom4j解析xml文件中的制定标签节点下的内容

如下图所示,P-PORT-PROTOTYPE 为xml文件中的节点,在任意位置,

用dom4j去解析该xml文件,如何直接定位到此节点,获取到xml文件中有多少个P-PORT-PROTOTYPE节点,然后ORT-PROTOTYPE下的SHORT-NAME的值

图片说明

  • 写回答

3条回答 默认 最新

  • 孤独在他乡 2019-06-10 16:36
    关注
     private static String  xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<root>\n" +
                "\t<root1>\n" +
                "\t\t<name>\n" +
                "\t\t\t<P-PORT-PROTOTYPE>\n" +
                "\t\t\t\t <SHORT-NAME>NAME1</SHORT-NAME>\n" +
                "\t\t\t\t <PROVIDED-INTERFACE-TREF>TREF1</PROVIDED-INTERFACE-TREF>\n" +
                "\t\t\t</P-PORT-PROTOTYPE>\n" +
                "\t\t</name>\n" +
                "\t\t<ports>\n" +
                "\t\t\t<P-PORT-PROTOTYPE>\n" +
                "\t\t\t\t <SHORT-NAME>NAME1</SHORT-NAME>\n" +
                "\t\t\t\t <PROVIDED-INTERFACE-TREF>TREF1</PROVIDED-INTERFACE-TREF>\n" +
                "\t\t\t</P-PORT-PROTOTYPE>\n" +
                "\t\t\t<P-PORT-PROTOTYPE>\n" +
                "\t\t\t\t<SHORT-NAME>NAME2</SHORT-NAME>\n" +
                "\t\t\t\t<PROVIDED-INTERFACE-TREF>TREF2</PROVIDED-INTERFACE-TREF>\n" +
                "\t\t\t</P-PORT-PROTOTYPE>\n" +
                "\t\t\t<P-PORT-PROTOTYPE>\n" +
                "\t\t\t\t<SHORT-NAME>NAME3</SHORT-NAME>\n" +
                "\t\t\t\t<PROVIDED-INTERFACE-TREF>TREF3</PROVIDED-INTERFACE-TREF>\n" +
                "\t\t\t</P-PORT-PROTOTYPE>\n" +
                "\t\t\t<P-PORT-PROTOTYPE>\n" +
                "\t\t\t\t<SHORT-NAME>NAME4</SHORT-NAME>\n" +
                "\t\t\t\t<PROVIDED-INTERFACE-TREF>TREF4</PROVIDED-INTERFACE-TREF>\n" +
                "\t\t\t</P-PORT-PROTOTYPE>\n" +
                "\t\t</ports>\n" +
                "\t</root1>\n" +
                "</root>";
    
        public static void main(String[] args) throws Exception{
            //将xml字符串转为Document对象
            Document document = DocumentHelper.parseText(xmlStr);
            //获取根节点 root节点
            Element rootElement = document.getRootElement();
            Map<String,Element> map = new HashMap<String,Element>();
            List<String> list = new ArrayList<String>();
            getE("P-PORT-PROTOTYPE",rootElement,map);
            System.out.println("匹配上"+map.size()+"个P-PORT-PROTOTYPE节点信息");
            for (String s : map.keySet()){
                System.out.println(s + "节点路径下的信息如下:");
                List<Element> elements = map.get(s).getParent().elements("P-PORT-PROTOTYPE");
                System.out.println("P-PORT-PROTOTYPE节点个数为:"+elements.size());
                for(Element e : elements){
                    for(Element e1 : e.elements()){
                        System.out.println(e1.getName() + "========" + e1.getTextTrim());
                    }
                }
            }
    
        }
    
        /**
         * 匹配指定元素
         * @param EName 目标元素
         * @param element 根元素
         * @param map 存放匹配上的元素集合
         */
        public static void getE(String EName, Element element, Map<String,Element> map){
           if(element.hasMixedContent() && !element.getName().equals(EName)){
               List<Element> elements = element.elements();
               for(Element e : elements){
                   getE(EName,e,map);
               }
           }else if (element.getName().equals(EName)){
               map.put(element.getPath(),element);
           }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格