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