welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

XMLObject 支持CDATA原始值


分类 Java   关键字 分享   标签 java   algorithm   发布 hongwei  1462411235627
注意 转载须保留原文链接,译文链接,作者译者等信息。  
最近看了些微信公众号开发文档,有些接口的xml数据包含CDATA原始值,所以修正了一下XMLObject以提供支持。

XMLObject是对xml进行逐字解析的,逐字解析<![CDATA[string]]>比较麻烦,而正则替换则相对简单,对之前的解析逻辑没有影响。
private static String cdata = "<\\!\\[CDATA\\[(.*)\\]\\]>";//<![CDATA[SUCCESS]]>
xml = xml.replaceAll(cdata, "$1");//替换<![CDATA[SUCCESS]]>为SUCCESS,之后的解析逻辑不变

生成CDATA数据
public static String CDATA(String value) { return "<![CDATA["+value+"]]>"; }
xml.update("return_code", XMLObject.CDATA(xml.get("return_code"))); //手动设置CDATA原始值

测试代码,见XMLObjectTester
@Test public void cdata() {
//这是公众号支付的统一下单接口的示例响应数据
String result = "<xml>\r\n" +
" <return_code><![CDATA[SUCCESS]]></return_code>\r\n" +
" <return_msg><![CDATA[OK]]></return_msg>\r\n" +
" <appid><![CDATA[wx2421b1c4370ec43b]]></appid>\r\n" +
" <mch_id><![CDATA[10000100]]></mch_id>\r\n" +
" <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>\r\n" +
" <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>\r\n" +
" <result_code><![CDATA[SUCCESS]]></result_code>\r\n" +
" <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>\r\n" +
" <trade_type><![CDATA[JSAPI]]></trade_type>\r\n" +
"</xml> ";
XMLObject xml = XMLObject.fromXML(result); //解析带有CDATA的xml
System.out.println(xml.toString());
xml.update("return_code", XMLObject.CDATA(xml.get("return_code"))); //更新return_code值,get获取原值
System.out.println(XMLObject.toXML(xml)); //带有<?xml version...头部
System.out.println(XMLObject.fromXML(XMLObject.toXML(xml)));
}


另请参考:
XMLObject 新增节点属性和空白过滤支持
XMLObject 简易xml格式接口数据生成和解析工具