1、android 伺服器數據返回類型為xml 怎麼解析
android 伺服器數據返回類型為xml解析是鍵值對對象。
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><?xml version="1.0" encoding="UTF-8"?>
<videonews>
<c:forEach items="${videos}" var="video">
<news id ="${video.id }">
<title>${video.title }</title>
<timelength>${video.timelenght}</timelength>
</news>
</c:forEach>
</videonews>
2、android怎麼獲取伺服器數據
一:基於Http協議獲取數據方法。二:基於SAOP協議獲取數據方法,
這篇文章主要是將關於使用Http協議獲取伺服器端數據,這里我們採取的伺服器端技術為java,框架為Struts2,或者可以有Servlet,又或者可直接從JSP頁面中獲取數據。
那麼,接下來我們便開始這一路程:
首先:編寫伺服器端方法,我這里採用的MVC框架是Struts2,目的很單純,就是為了以後做個完整的商業項目,技術配備為:android+SSH。當然,篇幅有限,我這里就直接用Strtus2而已。
伺服器端:新建WebProject ,選擇Java ee 5.0.
為了給項目添加Struts2的支持,我們必須導入Struts2的一些類庫,如下即可(有些jar包是不必的,但是我們後來擴展可能是要使用到的,就先弄進去):
1: xwork-core-2.2.1.1.jar
2: struts2-core-2.2.1.1.jar
3: commons-logging-1.0.4.jar
4: freemarker-2.3.16.jar
5: ognl-3.0.jar
6: javassist-3.7.ga.jar
7:commons-ileupload.jar
8:commons-io.jar
9:json-lib-2.1-jdk15.jar 處理JSON格式數據要使用到
10:struts2-json-plugin-2.2.1.1.jar 基於struts2的json插件
以上的jar包,需要放在WebRoot/WEB-INF/lib目錄下
然後在web.xml文件中敲下:
View Code
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 定義Struts2的核心控制器:FilterDispatcher -->
<filter>
<!-- 定義核心Filter的名稱 -->
<filter-name>struts2</filter-name>
<!-- 定義Filter的實現類 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
然後編寫struts.xml文件,並放在WebRoot/WEB-INF/lib目錄下:如下代碼:
View Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- setting encoding,DynamicMethod,language
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- add package here extends="struts-default"-->
<package name="dongzi" extends="json-default"> <!--需要將struts-default改為json-default-->
<!-- setting action -->
<action name="login" class="com.dongzi.action.loginAction" method="login">
<result type="json"></result> <!--返回值類型設置為json,不設置返回頁面-->
</action>
</package>
</struts>
配置好後,我們再根據<action>標簽內容來編寫action。方法為method對應的login,類名為loginAction,
注意:包繼承為:json-default ,輸出結果類型為json
如下:
View Code
public class loginAction extends ActionSupport implements
ServletRequestAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
HttpServletRequest request;
HttpServletResponse response;
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
public void login(){
try {
//HttpServletRequest request =ServletActionContext.getRequest();
// HttpServletResponse response=ServletActionContext.getResponse();
this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");
if(this.request.getParameter("username").equals("123456")){
this.response.getWriter().write("真的很奇怪,日本人!");
}else if(this.request.getParameter("username").equals("zhd")){
this.response.getWriter().write("沒有錯,我就是東子哥!");
}else{
this.response.getWriter().write("我就是東子哥!");
}
//將要返回的實體對象進行json處理
// JSONObject json=JSONObject.fromObject(this.getUsername());
//輸出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}
// System.out.println(json);
// this.response.getWriter().write(json.toString());
/**
JSONObject json=new JSONObject();
json.put("login", "login");
response.setContentType("text/html;charset=utf-8");
System.out.println(json);
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
**/
/**
JSONObject json=new JSONObject();
json.put("login", "login");
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
response.getOutputStream().flush();
response.getOutputStream().close();
**/
} catch (Exception e) {
e.printStackTrace();
}
// return null;
}
}
3、android怎麼從xml文件裡面提取數據
一、環境:
主機:WIN8
開發環境:Eclipse
二、說明:
1.打開sd卡中的xml文件,如果不存在,這新建一個,並寫入默認配置
2.讀取xml文件
三、xml文件格式:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<config>
<title>遠程視頻會見系統</title>
<local_port>12600</local_port>
<schele_service_ip>10.58.1.59</schele_service_ip>
<schele_service_port>12601</schele_service_port>
</config>
四、源代碼:
package com.example.helloanychat;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import android.os.Environment;
import android.util.Log;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
/**
* 配置信息類
* 新建日期:2014/12/8 by jdh
*/
public class Config implements IF_Config {
//配置信息
private Config_Info config_info = new Config_Info();
/**
* 構造函數
*/
public Config() {
boolean ok;
File sd_path;
File file_cfg_dir;
File file_cfg;
FileOutputStream out;
String str;
FileInputStream in;
//得到本機ip地址
config_info.local_ip = getLocalIpAddress();
System.out.printf("本機ip:%s\n", config_info.local_ip);
//獲取SD卡目錄
sd_path = Environment.getExternalStorageDirectory();
//判斷文件夾是否存在
file_cfg_dir = new File(sd_path.getPath() + "//Remote_Meeting");
if (!file_cfg_dir.exists() && !file_cfg_dir.isDirectory()) {
System.out.println("配置文件夾Remote_Meeting不存在!");
ok = file_cfg_dir.mkdirs();
if (ok) {
System.out.println("創建文件夾成功!");
} else {
System.out.println("創建文件夾失敗!");
}
}
//判斷配置文件是否存在
file_cfg = new File(file_cfg_dir.getPath(),"cfg.xml");
if (!file_cfg.exists())
{
System.out.println("配置文件cfg.xml不存在!");
try {
file_cfg.createNewFile();
System.out.println("創建文件cfg.xml成功!");
//生成初始化的配置數據
try {
out = new FileOutputStream(file_cfg);
//保存默認配置
config_info.title = "遠程視頻會見系統";
config_info.local_port = 12600;
config_info.schele_server_ip = "10.58.1.59";
config_info.schele_server_port = 12601;
str = proce_xml_string(config_info);
out.write(str.getBytes());
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
config_info.title = "遠程";
config_info.local_port = 126;
config_info.schele_server_ip = "10.5";
config_info.schele_server_port = 12;
System.out.printf("----222222222%s,%d,%s,%d\n",config_info.title,config_info.local_port,
config_info.schele_server_ip,config_info.schele_server_port);
//解析xml文件
try {
in = new FileInputStream(file_cfg);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(in);
// 獲取根節點
Element root = document.getDocumentElement();
NodeList node = root.getChildNodes();
//獲得第1子節點:標題
config_info.title = node.item(0).getFirstChild().getNodeValue();
//獲得第2子節點:本機埠
config_info.local_port = Integer.parseInt(node.item(1).getFirstChild().getNodeValue());
//獲得第3子節點:調度伺服器ip
config_info.schele_server_ip = node.item(2).getFirstChild().getNodeValue();
//獲得第4子節點:調度伺服器埠
config_info.schele_server_port = Integer.parseInt(node.item(3).getFirstChild().getNodeValue());
System.out.printf("----222222222%s,%d,%s,%d\n",config_info.title,config_info.local_port,
config_info.schele_server_ip,config_info.schele_server_port);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Config_Info get_config_info() {
return config_info;
}
/**
* 得到本機ip地址
* @return 本機ip地址
*/
private String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
//if (!inetAddress.isLoopbackAddress()) {
if (!inetAddress.isLoopbackAddress() && !(inetAddress instanceof Inet6Address)) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
/**
* 生成xml配置文件的String數據流
* Config_Info的本機ip信息不會保存
* @param info:配置信息
* @return xml的String數據流
*/
private String proce_xml_string(Config_Info info) {
StringWriter stringWriter = new StringWriter();
try {
// 獲取XmlSerializer對象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer xmlSerializer = factory.newSerializer();
// 設置輸出流對象
xmlSerializer.setOutput(stringWriter);
//開始標簽
xmlSerializer.startDocument("utf-8", true);
xmlSerializer.startTag(null, "config");
//標題
xmlSerializer.startTag(null, "title");
xmlSerializer.text(info.title);
xmlSerializer.endTag(null, "title");
//本機埠
xmlSerializer.startTag(null, "local_port");
xmlSerializer.text(Integer.toString(info.local_port));
xmlSerializer.endTag(null, "local_port");
//調度伺服器ip
xmlSerializer.startTag(null, "schele_service_ip");
xmlSerializer.text(info.schele_server_ip);
xmlSerializer.endTag(null, "schele_service_ip");
//調度伺服器埠
xmlSerializer.startTag(null, "schele_service_port");
xmlSerializer.text(Integer.toString(info.schele_server_port));
xmlSerializer.endTag(null, "schele_service_port");
xmlSerializer.endTag(null, "config");
xmlSerializer.endDocument();
} catch (Exception e) {
e.printStackTrace();
}
return stringWriter.toString();
}
}
4、安卓獲取xml信息
這樣可以獲取到index值,但這樣不科學,因為id值不一定是index值,你可以布局一個xml文件,一個用來存name,一個用來存value,這樣使用時直接可獲取到value。也可以建一個實體類,這樣更方便,望採納!
5、android開發從後台獲取xml數據怎麼解析
Android--3種解析XML數據的步驟
採用DOM解析時具體處理步驟是:
1 首先利用DocumentBuilderFactory創建一個DocumentBuilderFactory實例
2 然後利用DocumentBuilderFactory創建DocumentBuilder
3 然後載入XML文檔(Document),
4 然後獲取文檔的根結點(Element),
5 然後獲取根結點中所有子節點的列表(NodeList),
6 然後使用再獲取子節點列表中的需要讀取的結點。
採用SAX解析時具體處理步驟是:
1 創建SAXParserFactory對象
2 根據SAXParserFactory.newSAXParser()方法返回一個SAXParser解析器
3 根據SAXParser解析器獲取事件源對象XMLReader
4 實例化一個DefaultHandler對象
5 連接事件源對象XMLReader到事件處理類DefaultHandler中
6 調用XMLReader的parse方法從輸入源中獲取到的xml數據
7 通過DefaultHandler返回我們需要的數據集合。
採用PULL解析基本處理方式:
1:當導航到XmlPullParser.START_DOCUMENT,可以不做處理,當然你可以實例化集合對象等等。
2:當導航到XmlPullParser.START_TAG,則判斷是否是river標簽,如果是,則實例化river對象,並調用getAttributeValue方法獲取標簽中屬性值。
3:當導航到其他標簽,比如Introction時候,則判斷river對象是否為空,如不為空,則取出Introction中的內容,nextText方法來獲取文本節點內容
4:它一定會導航到XmlPullParser.END_TAG的,有開始就要有結束嘛。在這里我們就需要判讀是否是river結束標簽,如果是,則把river對象存進list集合中了,並設置river對象為null.
幾種解析技術的比較與總結:
對於Android的移動設備而言,因為設備的資源比較寶貴,內存是有限的,所以我們需要選擇適合的技術來解析XML,這樣有利於提高訪問的速度。
1 DOM在處理XML文件時,將XML文件解析成樹狀結構並放入內存中進行處理。當XML文件較小時,我們可以選DOM,因為它簡單、直觀。www.2cto.com
2 SAX則是以事件作為解析XML文件的模式,它將XML文件轉化成一系列的事件,由不同的事件處理器來決定如何處理。XML文件較大時,選擇SAX技術是比較合理的。雖然代碼量有些大,但是它不需要將所有的XML文件載入到內存中。這樣對於有限的Android內存更有效,而且Android提供了一種傳統的SAX使用方法以及一個便捷的SAX包裝器。
3 XML pull解析並未像SAX解析那樣監聽元素的結束,而是在開始處完成了大部分處理。這有利於提早讀取XML文件,可以極大的減少解析時間,這種優化對於連接速度較漫的移動設備而言尤為重要。對於XML文檔較大但只需要文檔的一部分時,XML Pull解析器則是更為有效的方法。
。。具體你可以再查看相關資料。
6、android調用webservice中方法傳參獲取XML 報錯
樓上發的不準啊!!!
7、android 怎麼讀取一個xml
關於具體使用方法,舉例如下:
1、updatelog.xml文件位於res/xml/文件夾下:
<?xml version="1.0" encoding="utf-8"?>
<updatelog>
<release
version="1.0"
versioncode="1.1">
<log>1、這個文件在res/xml文件夾下;</log>
<log>2、這個文件的名字是「updatelog.xml」</log>
<log>3、這是一個xml文件</log>
</release>
</updatelog>
2、在代碼中調用方法如下:
public class ResourcesActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.resources_layout );
mTextView = ( TextView )findViewById( R.id.textId );
getFileResources( );
}
private void getFileResources( ){
String packageName = getPackageName( );
try {
Resources resources = this.getPackageManager( ).getResourcesForApplication( packageName );
int resId = resources.getIdentifier( "updatelog", "xml", packageName );
String log = getUpdatelog( resId, resources );
int appId = resources.getIdentifier( "action_settings", "string", packageName );
String appName = resources.getString( appId );
mTextView.setText( appName + "\n" + log );
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
private String parseTag( XmlResourceParser xml ) throws XmlPullParserException, IOException {
String result = "Version: "+ xml.getAttributeValue(null, "version") + "\n" + "VersionCode: " + xml.getAttributeValue(null, "versioncode") + "\n";
int eventType = xml.getEventType( );
while( ( eventType != XmlPullParser.END_TAG ) || ( xml.getName( ).equals( "log" ) ) ) {
if( (eventType == XmlPullParser.START_TAG) && ( xml.getName( ).equals( "log" ) ) ) {
eventType = xml.next( );
result = result + xml.getText( ) + "\n";
}
eventType = xml.next( );
}
return result;
}
private String getUpdatelog( int resourceId, Resources resource ) {
String result = "";
XmlResourceParser xmlResParser = resource.getXml( resourceId );
try {
int eventType = xmlResParser.getEventType( );
while ( eventType != XmlPullParser.END_DOCUMENT ) {
if ( ( eventType == XmlPullParser.START_TAG ) && ( xmlResParser.getName( ).equals( "release" ) ) ) {
result = result + parseTag( xmlResParser );
}
eventType = xmlResParser.next( );
}
} catch (XmlPullParserException e) {
System.out.println( e.getMessage( ) );
} catch (IOException e) {
System.out.println( e.getMessage( ) );
} finally {
xmlResParser.close( );
}
return result;
}
private TextView mTextView = null;
}
8、android程序中 客戶端如何用pull 讀取遠程伺服器上的xml文件? 請給出代碼。謝謝。
下載的方法,希望可以幫你。
ublic static boolean downServerVersion() throws Exception{
apkUrl = readApkUrl();
URL url = new URL(apkUrl);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
String apkFile = saveFileName;
File ApkFile = new File(apkFile);
FileOutputStream fos = new FileOutputStream(ApkFile);
int count = 0;
byte buf[] = new byte[1024];
int numread = is.read(buf);
count += numread;
fos.write(buf, 0, numread);
fos.close();
is.close();
return false;
}
---------------------------------------------
---------------------------------------------
安卓開發低級寫手為你解答。
9、android studio 的xml數據獲取
這個很簡單啊xml解析,pull解析
public class PullBookParser {
@Override
public List<Book> parse(InputStream is) throws Exception {
List<Book> books = null;
Book book = null;
// XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// XmlPullParser parser = factory.newPullParser();
XmlPullParser parser = Xml.newPullParser(); //由android.util.Xml創建一個XmlPullParser實例
parser.setInput(is, "UTF-8"); //設置輸入流 並指明編碼方式
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
books = new ArrayList<Book>();
break;
case XmlPullParser.START_TAG:
if (parser.getName().equals("book")) {
book = new Book();
} else if (parser.getName().equals("id")) {
eventType = parser.next();
book.setId(Integer.parseInt(parser.getText()));
} else if (parser.getName().equals("name")) {
eventType = parser.next();
book.setName(parser.getText());
} else if (parser.getName().equals("price")) {
eventType = parser.next();
book.setPrice(Float.parseFloat(parser.getText()));
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("book")) {
books.add(book);
book = null;
}
break;
}
eventType = parser.next();
}
return books;
}
}
10、android中,使用pull解析伺服器端的xml數據,請問pull解析對xml數據格式有什麼要求?
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if (parser.getName().equals("city")) {
//----city---
} else if (parser.getName().equals("id")) {
eventType = parser.next();
//parser.getText() 就是id值
System.out.println("id ="+parser.getText());
} else if (parser.getName().equals("range")) {
eventType = parser.next();
//parser.getText() 就是range值
} else if (parser.getName().equals("title")) {
eventType = parser.next();
//parser.getText() 就是title值
} else if (parser.getName().equals("index")) {
eventType = parser.next();
//parser.getText() 就是index值
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("city")) {
}
break;
}
eventType = parser.next();
}
最好是 新建一個class City