近期碰到一个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;