dom4j解析xml

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper; 


包含上面的几个类,

下面是我要解析的xml,可以是文件,也可以是字符串,区别就两行代码。

<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns="http://nm.cmcc.com/BOSS/BOSSSrv/BOSSMethod/BOSS00005/">
    <Header>
        <AppID>BWOS</AppID>
        <Provide_AppID>BOSS</Provide_AppID>
    </Header>
    <Body>
        <PdlinkDict_List>
            <item>
                <link_id>3</link_id>
                <link_name>产品业务方案初评结果</link_name>
                <prod_id>PD_003</prod_id>
                <prod_name>云视讯</prod_name>
            </item>
            <item>
                <link_id>4</link_id>
                <link_name>SI引入情况(可选)</link_name>
                <prod_id>PD_003</prod_id>
                <prod_name>云视讯</prod_name>
            </item>
            <item>
                <link_id>5</link_id>
                <link_name>行业终端引入情况(可选)(C001)</link_name>
                <prod_id>PD_003</prod_id>
                <prod_name>云视讯</prod_name>
            </item>
            <item>
                <link_id>3</link_id>
                <link_name>产品业务方案初评结果</link_name>
                <prod_id>PD_008</prod_id>
                <prod_name>公车管家</prod_name>
            </item>
            <item>
                <link_id>4</link_id>
                <link_name>SI引入情况(可选)</link_name>
                <prod_id>PD_008</prod_id>
                <prod_name>公车管家</prod_name>
            </item>
            <item>
                <link_id>5</link_id>
                <link_name>行业终端引入情况(可选)(C001)</link_name>
                <prod_id>PD_008</prod_id>
                <prod_name>公车管家</prod_name>
            </item>
            <item>
                <link_id>3</link_id>
                <link_name>产品业务方案初评结果</link_name>
                <prod_id>PD_012</prod_id>
                <prod_name>新固化</prod_name>
            </item>
            <item>
                <link_id>4</link_id>
                <link_name>SI引入情况(可选)</link_name>
                <prod_id>PD_012</prod_id>
                <prod_name>新固化</prod_name>
            </item>
            <item>
                <link_id>5</link_id>
                <link_name>行业终端引入情况(可选)(C001)</link_name>
                <prod_id>PD_012</prod_id>
                <prod_name>新固化</prod_name>
            </item>
            <item>
                <link_id>11</link_id>
                <link_name>产品验收</link_name>
                <prod_id>PD_012</prod_id>
                <prod_name>新固化</prod_name>
            </item>
        </PdlinkDict_List>
    </Body>
</Message>


仔细研究上面的xml,分析好层次结构,开始解析了。我这里主要是想要PdlinkDict_List下面的那一大堆item数据

@SuppressWarnings({ "rawtypes", "unchecked" })
    public static List xmlElements(String xmlDoc) { 
        try {
            //用dom4j 来解析xml 
            Document document = DocumentHelper.parseText(xmlDoc); //解析XML字符串,得到document对象.  此处如果是xml文件换另外一条语句,百度一下就能查到 
              org.dom4j.Element node = document.getRootElement();  // 获取根元素(定死的,必须有)
              org.dom4j.Element Body=node.element("Body");//取得根节点下body节点(往下一层一层的往里解析)
              org.dom4j.Element PdlinkDict_List=Body.element("PdlinkDict_List");取得body节点下PdlinkDict_List节点(代码差不多,不要被list这个名字误导,其实和上面一样解析)
               List<org.dom4j.Element> items = PdlinkDict_List.elements("item"); //取得PdlinkDict_List节点下的item列表(因为这块是多行重复的tiem标签,获取方式依然是***.elements("节点名"),返回的类型换成 List<org.dom4j.Element> ;
            //   System.out.println("当前节点的名称:" + PdlinkDict_List.getName());   
                     
                for (org.dom4j.Element item : items) {  // 遍历item属性节点 
                       System.out.println(item.getText() + "-----" + item.getName() );  
                       org.dom4j.Element link_id = item.element("link_id");//到了循环里面依然和上面那样解析
                       org.dom4j.Element link_name = item.element("link_name");
                       org.dom4j.Element prod_id = item.element("prod_id");
                       org.dom4j.Element prod_name = item.element("prod_name");
                           //如果当前节点内容不为空
                         if(!(link_id.getTextTrim().equals(""))){  //这里是最底层有值的节点,取值吧。
                              System.out.println( link_id.getName() + ":" + link_id.getText());    
                         }  
                         if(!(link_name.getTextTrim().equals(""))){  
                             System.out.println( link_name.getName() + ":" + link_name.getText());    
                         }  
                         if(!(prod_id.getTextTrim().equals(""))){  
                             System.out.println( prod_id.getName() + ":" + prod_id.getText());    
                         }  
                         if(!(prod_name.getTextTrim().equals(""))){  
                             System.out.println( prod_name.getName() + ":" + prod_name.getText());    
                         }  
                       
                }  
               
        
            
        } catch (DocumentException e) {
            e.printStackTrace();
        }   
     
        return null;    
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值