数组转xml

根据业务(Soap 请求第三方Ws接口,Header 进行身份验证),中于系统中取得的header 部分 是map键值对:

 HashMap<String,Object> map =new HashMap<>();
        map.put("headers.authElement.userId.asd.as.zxc.zx","zhang");
        map.put("headers.authElement.userPass","123");

 

第三方接口需要的格式为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.cdyne.com/">
   <soapenv:Header>
   	<authElement>
	   	<userId>aa</userId>
	   	<userPass>123</userPass>
   	</authElement>
   </soapenv:Header>
   <soapenv:Body>
      <ws:sayHi>
         <!--Optional:-->
         <ws:name>2</ws:name>
      </ws:sayHi>
   </soapenv:Body>
</soapenv:Envelope>

 

贴代码:

public static void main(String[] args) {
        HashMap<String,Object> map =new HashMap<>();
        map.put("headers.authElement.userId.asd.as.zxc.zx","zhang");
        map.put("headers.authElement.userPass","123");
        System.err.println(new SoapProtocol().formatSOAPHeader(map));
}
 public String formatSOAPHeader(HashMap<String,Object> map){
        Iterator<Map.Entry<String,Object>> iterator = map.entrySet().iterator();
        StringBuffer sb = new StringBuffer();
        Document wsDocument = DocumentHelper.createDocument();
        Element root=wsDocument.addElement("SOAP-ENV:Header");
        while(iterator.hasNext()){
            Map.Entry<String,Object> entry = iterator.next();
            String key = entry.getKey();
            String value = entry.getValue().toString();
            String[] splitKey = key.split("\\.");
            joinHeader(splitKey,value,root);
        }
        return wsDocument.getRootElement().asXML();
    }


Element joinHeader(String[] splitKey,String value,Element root){
        for(int i=1;i<splitKey.length;i++){
            if(StringUtil.getChildElements(root,splitKey[i])==null){
                Element element = root.addElement(splitKey[i]);
                if(i==splitKey.length-1){
                    element.addText(value);
                }else{
                    root=element;
                }
            }else{
                root=root.element(splitKey[i]);
            }
        }
        return root;
    }

 

Java中,可以使用json-libjar包中的工具类来实现json数组转xml。具体步骤如下: 1. 创建一个JSONObject对象,将json字符串转换为JSONObject对象。 2. 创建一个Document对象,用于生成XML文档。 3. 遍历JSONObject对象,将每个键值对转换为XML元素,并添加到Document对象中。 4. 将Document对象转换为XML字符串。 下面是一个简单的示例代码: ``` import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.xml.XMLSerializer; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.util.Iterator; public class JsonToXml { public static void main(String[] args) throws ParserConfigurationException { String jsonStr = "[{\"name\":\"John\",\"age\":30,\"city\":\"New York\"},{\"name\":\"Jane\",\"age\":25,\"city\":\"San Francisco\"}]"; JSONArray jsonArray = JSONArray.fromObject(jsonStr); Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Element root = doc.createElement("root"); doc.appendChild(root); Iterator<JSONObject> iterator = jsonArray.iterator(); while (iterator.hasNext()) { JSONObject jsonObject = iterator.next(); Element element = doc.createElement("person"); root.appendChild(element); Iterator<String> keys = jsonObject.keys(); while (keys.hasNext()) { String key = keys.next(); Element subElement = doc.createElement(key); subElement.setTextContent(jsonObject.getString(key)); element.appendChild(subElement); } } XMLSerializer xmlSerializer = new XMLSerializer(); String xmlStr = xmlSerializer.write(doc); System.out.println(xmlStr); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值