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;
}
`