A. 在java中解析xml有哪幾種方法
(1)DOM解析
DOM是html和xml的應用程序介面(API),以層次結構(類似於樹型)來組織節點和信息片段,映射XML文檔的結構,允許獲取
和操作文檔的任意部分,是W3C的官方標准
【優點】
①允許應用程序對數據和結構做出更改。
②訪問是雙向的,可以在任何時候在樹中上下導航,獲取和操作任意部分的數據。
【缺點】
①通常需要載入整個XML文檔來構造層次結構,消耗資源大。
【解析詳解】
①構建Document對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = bdf.newDocumentBuilder();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);
Document doc = bd.parse(is);
②遍歷DOM對象
Document: XML文檔對象,由解析器獲取
NodeList: 節點數組
Node: 節點(包括element、#text)
Element: 元素,可用於獲取屬性參數
(2)SAX(Simple API for XML)解析
流模型中的"推"模型分析方式。通過事件驅動,每發現一個節點就引發一個事件,事件推給事件處理器,通過回調方法
完成解析工作,解析XML文檔的邏輯需要應用程序完成
【優勢】
①不需要等待所有數據都被處理,分析就能立即開始。
②只在讀取數據時檢查數據,不需要保存在內存中。
③可以在某個條件得到滿足時停止解析,不必解析整個文檔。
④效率和性能較高,能解析大於系統內存的文檔。
【缺點】
①需要應用程序自己負責TAG的處理邏輯(例如維護父/子關系等),文檔越復雜程序就越復雜。
②單向導航,無法定位文檔層次,很難同時訪問同一文檔的不同部分數據,不支持XPath。
【原理】
簡單的說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束時通知事件
處理函數(回調函數),進行相應處理,直到文檔結束
【事件處理器類型】
①訪問XML DTD:DTDHandler
②低級訪問解析錯誤:ErrorHandler
③訪問文檔內容:ContextHandler
【DefaultHandler類】
SAX事件處理程序的默認基類,實現了DTDHandler、ErrorHandler、ContextHandler和EntityResolver介面,通常
做法是,繼承該基類,重寫需要的方法,如startDocument()
【創建SAX解析器】
SAXParserFactory saxf = SAXParserFactory.newInstance();
SAXParser sax = saxf.newSAXParser();
註:關於遍歷
①深度優先遍歷(Depthi-First Traserval)
②廣度優先遍歷(Width-First Traserval)
(3)JDOM(Java-based Document Object Model)
Java特定的文檔對象模型。自身不包含解析器,使用SAX
【優點】
①使用具體類而不是介面,簡化了DOM的API。
②大量使用了Java集合類,方便了Java開發人員。
【缺點】
①沒有較好的靈活性。
②性能較差。
(4)DOM4J(Document Object Model for Java)
簡單易用,採用Java集合框架,並完全支持DOM、SAX和JAXP
【優點】
①大量使用了Java集合類,方便Java開發人員,同時提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺點】
①大量使用了介面,API較為復雜。
(5)StAX(Streaming API for XML)
流模型中的拉模型分析方式。提供基於指針和基於迭代器兩種方式的支持,JDK1.6新特性
【和推式解析相比的優點】
①在拉式解析中,事件是由解析應用產生的,因此拉式解析中向客戶端提供的是解析規則,而不是解析器。
②同推式解析相比,拉式解析的代碼更簡單,而且不用那麼多庫。
③拉式解析客戶端能夠一次讀取多個XML文件。
④拉式解析允許你過濾XML文件和跳過解析事件。
【簡介】
StAX API的實現是使用了Java Web服務開發(JWSDP)1.6,並結合了Sun Java流式XML分析器(SJSXP)-它位於
javax.xml.stream包中。XMLStreamReader介面用於分析一個XML文檔,而XMLStreamWriter介面用於生成一個
XML文檔。XMLEventReader負責使用一個對象事件迭代子分析XML事件-這與XMLStreamReader所使用的游標機制
形成對照。
B. java 怎麼接收第三方傳過來的xml
下面是一個java Servlet示例,用於接收POST提交過來的XML數據(僅供參考 ):
Java Servlet代碼片段:
import java.io.*;
//...... Servlet doPost相關代碼略去
BufferedReader in = request.getReader();
String line;
String realPath = request.getServletContext().getRealPath("/saved-data.txt");
File f = new File(realPath);
FileWriter fw = new FileWriter(realPath);
BufferedWriter bw = new BufferedWriter(fw);
try {
while ((line = in.readLine()) != null) {
out.println(line);
bw.write(line);
bw.newLine();
}
bw.close();
fw.close();
out.print("saved data ok!");
} catch (Exception e) {
e.printStackTrace();
out.println("Mission Completed");
}
C. PHP如何向JAVA介面webservice發送xml
function httpPostXml($url='',$xmlData=''){
$server = $url;
//首先檢測是否支持curl
if (!extension_loaded("curl")) {
trigger_error("對不起,請開啟curl功能模塊!", E_USER_ERROR);
return null;
}
//構造xml
$xmldata= $xmlData;
//初始一個curl會話
$curl = curl_init();
//設置url
curl_setopt($curl, CURLOPT_URL,$server);
//設置發送方式:post
curl_setopt($curl, CURLOPT_POST, true);
//設置發送數據
curl_setopt($curl, CURLOPT_POSTFIELDS, $xmldata);
//不輸出瀏覽器,返回service返回值
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//抓取URL並把它傳遞給瀏覽器
$return = curl_exec($curl);
//關閉cURL資源,並且釋放系統資源
if(curl_errno($curl)){
echo curl_error($curl);
}
var_mp($return);
$xml = simplexml_load_string($return);
$returnData = json_decode(json_encode($xml),TRUE);
return $returnData;
}
D. java 怎麼接收第三方傳過來的xml
如果是網站傳過來的,應該是用http協議發過來的,可以使用HttpEntity中的方法(記得好像是response.getEntity()這樣用的)來獲取消息體,再創建一個xml的實例把消息體裡面的xml接收下來就好啦。如果是寫介面的話可以寫一個接受消息體的方法和一個格式化xml的方法
E. Java Web調http介面發送的XML那種報文怎麼看,我想看我發送的報文格式是否與人家的樣例一樣
其實很多種方法可以看,你可以將報文轉換成string,或者下載一個http監控器,例如fiddler2這樣的工具,可以看到所有請求的數據的,希望深圳遠標培訓中心能幫到你!
F. JAVA調第三方介面返回XML文件用httpclient實現求大神給指示(新號就5分全給了)要一個工具類,一個用例
以下是一個http介面調用的例子:區別是返回的json數據,xml數據也是一樣的,解析下xml數據就可以了,希望對你有幫助
public String getOrderCount() {
String mobile = ServletActionContext.getRequest().getParameter("mobile");
String urlStr = "http://127.0.0.1/OderServer/orderCount.htm";
urlStr += "?telphone=" + mobile + "&endTime=" + DateUtil.getCurrentDay("yyyyMMdd") + "&timeLength=2";
URL url = null;
HttpURLConnection httpurlconnection = null;
try {
url = new URL(urlStr);
// 以post方式請求
httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setDoOutput(true);
httpurlconnection.setRequestMethod("POST");
httpurlconnection.getOutputStream().flush();
httpurlconnection.getOutputStream().close();
// 獲取響應代碼
//int code = httpurlconnection.getResponseCode();
//System.out.println("code " + code);
// 獲取頁面內容
java.io.InputStream in = httpurlconnection.getInputStream();
java.io.BufferedReader breader = new BufferedReader(
new InputStreamReader(in, "utf-8"));
StringBuffer result = new StringBuffer();
String str = breader.readLine();
while (str != null) {
result.append(str);
str = breader.readLine();
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json;charset=utf-8");
response.getWriter().print(result);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpurlconnection != null)
httpurlconnection.disconnect();
}
return null;
}
G. java xml 介面
自己寫一個servlet 接收請求。收到請求後用dom4j或jdom生成一個對應的xml,然後用response的輸出流把xml作為響應輸出。
H. JAVA利用Webservice從對方提供的介面獲取XML格式的數據
//dom4j解析XML
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new File("student2.xml"));
Element root = doc.getRootElement();
List childList = root.elements();
List childList2 = root.elements("hello");
Element first = root.element("hello");
System.out.println(first.attributeValue("age"));
for(Iterator iter = root.elementIterator(); iter.hasNext();)
{
Element e = (Element)iter.next();
System.out.println(e.attributeValue("age"));
}
System.out.println("---------------------------");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(new File("student2.xml"));
DOMReader domReader = new DOMReader();
//將JAXP的Document轉換為dom4j的Document
Document d = domReader.read(document);
Element rootElement = d.getRootElement();
System.out.println(rootElement.getName());
I. 您好:我也是java,不過是新手,因為現在有個需求就是,調用第三方介面,並傳入xml格式,求教。謝謝!!
網路:HttpClient 例子。 xml格式意思是:用流的方式傳入xml格式的字元串
J. java調用基於http+post+xml介面
1、直接用servlet就可以了,request.getInputStream(),然後解析xml,然後你的業務操作,組裝XML,response.getOutputStream()寫出去就OK了。
但這個性能低,而且還要依賴web容器。
2、socket實現http協議,把HTTP協議好好看看,自己解析(其實就是字元串的操作哦)。
3、你要是只做客戶端的話可以用httpClient,幾行代碼搞定了