一、使用最原始的javax.xml.parsers,標(biāo)準(zhǔn)的jdk api
在合陽(yáng)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需求定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,合陽(yáng)網(wǎng)站建設(shè)費(fèi)用合理。
// 字符串轉(zhuǎn)XML
String xmlStr = "......";
StringReader sr = new StringReader(xmlStr);?
InputSource is = new InputSource(sr);?
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();?
DocumentBuilder builder=factory.newDocumentBuilder();?
Document doc = builder.parse(is);
//XML轉(zhuǎn)字符串
TransformerFactory? tf? =? TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty("encoding","GB23121");//解決中文問(wèn)題,試過(guò)用GBK不行
ByteArrayOutputStream? bos? =? new? ByteArrayOutputStream();
t.transform(new DOMSource(doc), new StreamResult(bos));
String xmlStr = bos.toString();
這里的XML DOCUMENT為org.w3c.dom.Document
二、使用dom4j后程序變得更簡(jiǎn)單
// 字符串轉(zhuǎn)XML
String xmlStr = "......";
Document document = DocumentHelper.parseText(xmlStr);
// XML轉(zhuǎn)字符串?
Document document = ...;
String text = document.asXML();
這里的XML DOCUMENT為org.dom4j.Document
三、使用JDOM
JDOM的處理方式和第一種方法處理非常類(lèi)似
//字符串轉(zhuǎn)XML
String xmlStr = ".....";
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
Document doc = (new SAXBuilder()).build(is);
//XML轉(zhuǎn)字符串
Format format = Format.getPrettyFormat();
format.setEncoding("gb2312");//設(shè)置xml文件的字符為gb2312,解決中文問(wèn)題
XMLOutputter xmlout = new XMLOutputter(format);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
xmlout.output(doc,bo);
String xmlStr = bo.toString();
這里的XML DOCUMENT為org.jdom.Document
四、JAVASCRIPT中的處理
//字符串轉(zhuǎn)XML
var xmlStr = ".....";
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(xmlStr);
//可以處理這個(gè)xmlDoc了
var name = xmlDoc.selectSingleNode("/person/name");
alert(name.text);
//XML轉(zhuǎn)字符串
var xmlDoc = ......;
var xmlStr = xmlDoc.xml
使用jdom,dom4j等進(jìn)行解析,還有一個(gè)很強(qiáng)大的東西XStream都可以進(jìn)行XML操作,至于傳送,可以放在頭部setHeder 如果是對(duì)象的話(huà)就更簡(jiǎn)單了使用XMLEncoder java自帶的。
XMLEncoder 的實(shí)例代碼如下:
public static String beanToXml(Object obj)
throws UnsupportedEncodingException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
XMLEncoder encoder = new XMLEncoder(bos);
encoder.writeObject(obj);
encoder.close();
return bos.toString("UTF-8");
}
public static Object XmlToBean(String xmlParam)
throws UnsupportedEncodingException, DocumentException {
ByteArrayInputStream ios = new ByteArrayInputStream(
xmlParam.getBytes("UTF-8"));
XMLDecoder decoder = new XMLDecoder(ios);
Object obj = decoder.readObject();
return obj;
}
如果是網(wǎng)站傳過(guò)來(lái)的,應(yīng)該是用http協(xié)議發(fā)過(guò)來(lái)的,可以使用HttpEntity中的方法(記得好像是response.getEntity()這樣用的)來(lái)獲取消息體,再創(chuàng)建一個(gè)xml的實(shí)例把消息體里面的xml接收下來(lái)就好啦。如果是寫(xiě)接口的話(huà)可以寫(xiě)一個(gè)接受消息體的方法和一個(gè)格式化xml的方法
步驟如下:
1.下載AXIS2類(lèi)庫(kù),AXIS2是目前java調(diào)用webservice的一個(gè)主要方法(由于更新較頻繁,請(qǐng)自行g(shù)oogle該類(lèi)庫(kù)的網(wǎng)址)
2.由于是第三方webservice,直接引入AXIS2的包就可以
代碼如下:
import java.rmi.RemoteException;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class webServiceTest {
public String invokeRemoteFuc() {
String endpoint = "";
String result = "no result!";
Service service = new Service();//新建一個(gè)service
Call call;
Object[] object = new Object[1];
object[0] = "Dear I miss you";//Object是用來(lái)存儲(chǔ)方法的參數(shù)
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);// 遠(yuǎn)程調(diào)用路徑
call.setOperationName("say");// 調(diào)用的方法名
// 設(shè)置參數(shù)名:
call.addParameter("str1", // 參數(shù)名
XMLType.XSD_STRING,// 參數(shù)類(lèi)型:String
ParameterMode.IN);// 參數(shù)模式:'IN' or 'OUT'
// 設(shè)置返回值類(lèi)型:
call.setReturnType(XMLType.XSD_STRING);// 返回值類(lèi)型:String
result = (String) call.invoke(object);// 遠(yuǎn)程調(diào)用
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
return result;//返回值
}
public static void main(String[] args) {
webServiceTest t = new webServiceTest();
String result = t.invokeRemoteFuc();
System.out.println(result); //輸出
}
}
通過(guò)AXIS2封裝好的類(lèi)設(shè)置URL和參數(shù),直接調(diào)用。