近期碰到一个XML截取一段的问题,研究了一下。分享分享
<?xml version="1.0" encoding="GBK"?> <return> <result>104</result> <info>成功接收到消息,信息已返回</info> <service> <arguments operate="ApplyPNRService" entityName="PNREntity"> <param name="records" type="Dictionary"> <param name="record" type="Dictionary"> <param name="FLOW_ID" type="String">19381</param> <param name="BILL_ID" type="String">18351</param> <param name="SEET_CODE" type="String">null</param> <param name="FLAG" type="String">N</param> <param name="REMARK" type="String"> 温馨提示 </param> <param name="BUSINESS_TYPE" type="String" /> <param name="ASSIGNEE_AIRCOMPANY_CODE" type="String"> 哈哈 </param> <param name="BOOK_COMPANY" type="String" /> </param> </param> </arguments> </service> </return>
现在我要截取中的一段,可以采用XPATH+DOM4J的方式来实现
比如上面的XML,我要截取其中的
<param name="record" type="Dictionary"> <param name="FLOW_ID" type="String">19381</param> <param name="BILL_ID" type="String">18351</param> <param name="SEET_CODE" type="String">null</param> <param name="FLAG" type="String">N</param> <param name="REMARK" type="String">温馨提示</param> <param name="BUSINESS_TYPE" type="String" /> <param name="ASSIGNEE_AIRCOMPANY_CODE" type="String">哈哈</param> <param name="BOOK_COMPANY" type="String" /> </param>
解析代码如下:
1:将整个XML文件以String类型的方式传入进来
2:创建一个变量,用来接收返回值
3:创建一个Document对象,即org.dom4j.Document = DocumentHelper.parseText(T)
4:获取该被劫取文档的开头,使用XPATH去获取,即
String xpath = "/return/service/arguments/param/param[@name='record']"
5:读取节点,即
org.dom4j.Element ele = (org.dom4j.Element)ment.selectSingleNode(xpath);
6:使用一下XML方法转换一下
reXml = ele.asXML();
详细代码如下:
String reXml = null; try { org.dom4j.Document ment = DocumentHelper.parseText(xml); String xpath = "/return/service/arguments/param/param[@name='record']"; org.dom4j.Element ele = (org.dom4j.Element)ment.selectSingleNode(xpath); reXml = ele.asXML(); } catch (Exception e) { // TODO: handle exception } return reXml;