java 在dom4j中,使用XPath处理XML(主要对命名空间的处理)
2013-04-01 18:43
429 查看
java中使用dom4j对带有命名空间的xml文件进行解析
import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.XPath; import java.util.*; /** * Java解析XML元素 */ public class XML { //要测试的xml对象,带有命名空间 static String str = "<rsiq to=\"378\" type=\"result\" from=\"12345678#hjh20120718150006@126.com/cti\">" + "<query xmlns=\"http://te.com/resource/cti/getonlineseat\">" + "<telephone>12345678</telephone>" + "<session-id>20130328155409100477</session-id>" + "<workgroup><groupname>66666</groupname><seats/></workgroup><workgroup><groupname>888</groupname><seats/></workgroup>" + "<workgroup><groupname>test</groupname><seats>" + "<seat><jid>378</jid><name>地方</name><seatnumber>378</seatnumber></seat>" + "</seats></workgroup></query></rsiq>"; //要测试的xml对象,没有命名空间 static String str1 = "<rsiq to=\"378\" type=\"result\" from=\"12345678#hjh20120718150006@126.com/cti\">" + "<query >" + "<telephone>12345678</telephone>" + "<session-id>20130328155409100477</session-id>" + "<workgroup><groupname>66666</groupname><seats/></workgroup><workgroup><groupname>888</groupname><seats/></workgroup>" + "<workgroup><groupname>test</groupname><seats>" + "<seat><jid>378</jid><name>地方</name><seatnumber>378</seatnumber></seat>" + "</seats></workgroup></query></rsiq>"; //传统方法一步一步解析带有命名空间的XML文件 @SuppressWarnings("unchecked") private static void test() throws DocumentException { List<Map<String, Object>> seatlist = new ArrayList<Map<String,Object>>(); Document document = DocumentHelper.parseText(str); Element root = document.getRootElement(); Element query = root.element("query"); List<Element> workgroups = query.elements("workgroup"); for(Element workgroup : workgroups) { Element seatsElement = workgroup.element("seats"); List<Element> seats = seatsElement.elements("seat"); for(Element seat : seats) { Map<String, Object> seatmap = new HashMap<String, Object>(); String jid = seat.elementText("jid"); String seatname = seat.elementText("name"); String seatnumber = seat.elementText("seatnumber"); String sessioncount = seat.elementText("sessioncount"); seatmap.put("jid",jid); seatmap.put("seatname",seatname); seatmap.put("seatnumber",seatnumber); seatmap.put("sessioncount",sessioncount); seatlist.add(seatmap); System.out.println(seatmap); } } System.out.println(seatlist); } //Xpath方法解析没有命名空间的XML文件 @SuppressWarnings("unchecked") private static void test1() throws DocumentException { List<Map<String, Object>> seatlist = new ArrayList<Map<String,Object>>(); Document document = DocumentHelper.parseText(str1); List seats = document.selectNodes("//seat"); for (int i = 0; i < seats.size(); i++) { Map<String, Object> seatmap = new HashMap<String, Object>(); Element seat = (Element) seats.get(i); String jid = seat.elementText("jid"); String seatname = seat.elementText("name"); String seatnumber = seat.elementText("seatnumber"); String sessioncount = seat.elementText("sessioncount"); seatmap.put("jid",jid); seatmap.put("seatname",seatname); seatmap.put("seatnumber",seatnumber); seatmap.put("sessioncount",sessioncount); seatlist.add(seatmap); } System.out.println(seatlist); } //带有命名空间的XML文件,Xpath的解析方法 @SuppressWarnings("unchecked") private static void test2() throws DocumentException { List<Map<String, Object>> seatlist = new ArrayList<Map<String,Object>>(); Map map = new HashMap(); map.put("getonlineseat","http://te.com/resource/cti/getonlineseat"); Document document = DocumentHelper.parseText(str); XPath x = document.createXPath("//getonlineseat:seat"); x.setNamespaceURIs(map); List nodelist = x.selectNodes(document); for (int i = 0; i < nodelist.size(); i++) { Map<String, Object> seatmap = new HashMap<String, Object>(); Element seat = (Element) nodelist.get(i); String jid = seat.elementText("jid"); String seatname = seat.elementText("name"); String seatnumber = seat.elementText("seatnumber"); String sessioncount = seat.elementText("sessioncount"); seatmap.put("jid",jid); seatmap.put("seatname",seatname); seatmap.put("seatnumber",seatnumber); seatmap.put("sessioncount",sessioncount); seatlist.add(seatmap); } System.out.println(seatlist); } //主函数 public static void main(String args[]) throws DocumentException { System.out.println("-----------test()方法------------"); test(); System.out.println("-----------test1()方法------------"); test1(); System.out.println("-----------test2()方法------------"); test2(); } }
相关文章推荐
- dom4j处理带命名空间的XML-使用XPath
- dom4j中通过xpath处理带命名空间的XML文件
- dom4j 使用原生xpath 处理带命名空间的文档
- java中使用Dom4j的xPath解析xml文件
- DOM4J处理XML带有命名空间的四种方法
- java使用dom4j和XPath解析XML与.net 操作XML小结
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- 当xml带有命名空间时。dom4j的处理办法
- dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
- XML中处理带有命名空间的XPath查询
- xml内容解析,包含命名空间时需特殊处理(dom4j)
- 当xml中存在命名空间,三种处理办法(dom4j)
- java 解析xml是使用dom4j空行以及中文乱码的处理
- dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
- 使用XPath查询带有命名空间(有xmlns)的XML
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- java中XML文档解析2(dom4j)和xpath的使用
- 当 xml中存在命名空间,三种处理办法(dom4j)
- Xpath dom4j解析带有命名空间的XML的方法
- Java XML 处理,命名空间,javax.xml