Java 解析微信接口返回xml字符串的方法

public static void main(String[] args) {
		String str = "<xml>\n" +
				"   <return_code><![CDATA[SUCCESS]]></return_code>\n" +
				"   <return_msg><![CDATA[OK]]></return_msg>\n" +
				"   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>\n" +
				"   <mch_id><![CDATA[10000100]]></mch_id>\n" +
				"   <device_info><![CDATA[1000]]></device_info>\n" +
				"   <nonce_str><![CDATA[TN55wO9Pba5yENl8]]></nonce_str>\n" +
				"   <sign><![CDATA[BDF0099C15FF7BC6B1585FBB110AB635]]></sign>\n" +
				"   <result_code><![CDATA[SUCCESS]]></result_code>\n" +
				"   <openid><![CDATA[oUpF8uN95-Ptaags6E_roPHg7AG0]]></openid>\n" +
				"   <is_subscribe><![CDATA[Y]]></is_subscribe>\n" +
				"   <trade_type><![CDATA[MICROPAY]]></trade_type>\n" +
				"   <bank_type><![CDATA[CCB_DEBIT]]></bank_type>\n" +
				"   <total_fee>1</total_fee>\n" +
				"   <fee_type><![CDATA[CNY]]></fee_type>\n" +
				"   <transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>\n" +
				"   <out_trade_no><![CDATA[1415757673]]></out_trade_no>\n" +
				"   <attach><![CDATA[订单额外描述]]></attach>\n" +
				"   <time_end><![CDATA[20141111170043]]></time_end>\n" +
				"   <trade_state><![CDATA[SUCCESS]]></trade_state>\n" +
				"</xml>";
		Map<String, Object> map = readStringXmlOut(str);
		JSONObject jsonObject = new JSONObject(map);
		System.out.println(jsonObject.toJSONString());
	}
/**
	 * 将xml字符串转换成map
	 * @param xml xml数据
	 * @return Map
	 */
	public static Map<String,Object> readStringXmlOut(String xml) {
		Map<String,Object> map = new HashMap<String,Object>();
		try {
			Document doc = DocumentHelper.parseText(xml);
			Element root = doc.getRootElement();
			Iterator it = root.elementIterator();
			while (it.hasNext()) {
				Element element = (Element) it.next();
				map.put(element.getName(), element.getTextTrim());
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}

		return map;
	}
//执行结果
{"appid":"wx2421b1c4370ec43b","attach":"订单额外描述","bank_type":"CCB_DEBIT","device_info":"1000","fee_type":"CNY","is_subscribe":"Y","mch_id":"10000100","nonce_str":"TN55wO9Pba5yENl8","openid":"oUpF8uN95-Ptaags6E_roPHg7AG0","out_trade_no":"1415757673","result_code":"SUCCESS","return_code":"SUCCESS","return_msg":"OK","sign":"BDF0099C15FF7BC6B1585FBB110AB635","time_end":"20141111170043","total_fee":"1","trade_state":"SUCCESS","trade_type":"MICROPAY","transaction_id":"1008450740201411110005820873"}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Java中的相关库来将微信支付返回的参数xml转换为String。其中,可以使用Java中自带的JAXB库,或者第三方库,如Jackson、Dom4j等。 以下是使用Dom4j库将微信支付返回的参数xml转换为String的示例代码: ```java import java.io.StringWriter; import org.dom4j.Document; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class XmlToString { public static String xmlToString(String xml) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xml.getBytes("UTF-8"))); StringWriter stringWriter = new StringWriter(); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(stringWriter, format); writer.write(document); writer.close(); return stringWriter.toString(); } } ``` 以上代码中,使用SAXReader类将xml解析为Document对象,然后使用XMLWriter类将Document对象转换为String。输出的String是格式化后的,如果不需要格式化,可以使用OutputFormat.createCompactFormat()。 这是一个使用Dom4j库的简单示例,也可以使用其他库来实现相同的功能。 ### 回答2: 在Java中将微信支付返回的参数xml转换为string,您可以使用DOM解析器来实现。下面是一个示例代码: ```java import org.w3c.dom.Document; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.StringReader; public class XmlToString { public static String convertXmlToString(String xml) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource inputSource = new InputSource(new StringReader(xml)); Document doc = builder.parse(inputSource); doc.getDocumentElement().normalize(); return doc.getDocumentElement().getTextContent(); } catch (Exception e) { e.printStackTrace(); return ""; } } public static void main(String[] args) { String xml = "<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>"; String result = convertXmlToString(xml); System.out.println(result); } } ``` 上述代码中,我们首先创建了一个`DocumentBuilderFactory`和`DocumentBuilder`对象。然后,将传入的xml字符串转换为`InputSource`对象,并使用`DocumentBuilder`解析该对象。接下来,调用`normalize()`方法xml归一化处理,以便获取标签内容。最后,使用`getTextContent()`方法获取标签内容,并将其返回作为字符串。 在`main`方法中,我们提供了一个xml字符串,并调用`convertXmlToString`方法进行转换。最后,将结果打印出来。 请注意,上述代码只是示例,您可以根据实际需要进行修改和适配。 ### 回答3: 在Java中将微信支付返回的参数XML转换为String的方式有多种方法,其中一种常用的方法是使用JavaXML解析库进行解析。 首先,我们可以使用Java的内置库`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.parsers.DocumentBuilder`来解析XML。具体步骤如下: 1. 创建一个`DocumentBuilderFactory`对象,并通过`newInstance()`方法获取实例。 2. 创建一个`DocumentBuilder`对象,并通过`newDocumentBuilder()`方法获取实例。 3. 使用`DocumentBuilder`对象的`parse()`方法XML字符串解析为一个`Document`对象。 4. 通过`Document`对象的`getElementsByTagName()`方法获取指定标签名的节点列表。 5. 遍历节点列表,使用`getTextContent()`方法获取每个节点的文本内容,并将其拼接为一个完整的字符串。 以下是一个示例代码: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.io.ByteArrayInputStream; public class XmlToString { public static void main(String[] args) { String xml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><appid><![CDATA[wx1234567890]]></appid></xml>"; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new ByteArrayInputStream(xml.getBytes("UTF-8"))); NodeList nodeList = doc.getElementsByTagName("*"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); sb.append(node.getNodeName()).append(":").append(node.getTextContent()).append("\n"); } String result = sb.toString(); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码将会输出转换后的字符串: ``` xml:SUCCESS return_code:SUCCESS return_msg:OK appid:wx1234567890 ``` 通过以上步骤,我们可以将微信支付返回的参数XML成功转换为一个String对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值