本篇文章给大家谈谈java解析dataset,以及java解析xml文件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、通过webservice调用一个网站的公共接口,他返回的数据是.net的dataset,用java怎么解析使用dataset呢?2、JAVA处理含有DataSet的web services3、java如何解析xml格式的字符串4、怎么解析webservice返回的dataset数据5、C# webservice返回DataSet类型,android怎么调用解析?
通过webservice调用一个网站的公共接口,他返回的数据是.net的dataset,用java怎么解析使用dataset呢?
返回一个ArrayArray 。。。。。如果兼容问题,可以是按HTTP POST方式调用
JAVA处理含有DataSet的web services
本篇文章将讲述如何通过axis取发布的Web services 并处理返回含有DataSet的处理结果 展现在页面上
涉及到的知识有
AXIS
SAXBuilder
xml
步骤如下
) 生成client stub文件
必备条件axis开源包 JDK
A) 比如AXIS包放在你的C盘 则需要在环境变量当中设定的东东有
AXIS_HOME=C:\AXIS
AXIS_CLASSPATH= ;%AXIS_HOME%\lib\axis jar;%AXIS_HOME%\lib\axis ant jar;%AXIS_HOME%\lib\mons discovery jar;%AXIS_HOME%\lib\mons logging jar;%AXIS_HOME%\lib\jaxrpc jar;%AXIS_HOME%\lib\saaj jar;%AXIS_HOME%\lib\wsdl j jar;%AXIS_HOME%\lib\log j jar;%AXIS_HOME%\lib\activation jar;%AXIS_HOME%\lib\mail jar
然后加入到PATH当中 ;% AXIS_CLASSPATH% (加入就可以了)
注意 很多人因为以上的配置不对 导致对AXIS学习的信心下降 其实 仔细一点就会发现在CLASSPATH当中找一找有没有版本区别 也就是每一个JAR包是不是真的存在就可以了 (哈哈 我曾为之付出了两天的时间娞!)
B) 进入DOS模式 转到D盘 执行如下代码
java apache axis wsdl WSDL Java p 名称 最好是包名 看到了吧 发布为a *** x的文件后面加入?wsdl就可以解决了
然后就会在这个名称 最好是包名下就会有一堆的JAVA文件 一般的话会有
xxxx java
xxxxLocator java
xxxxSoap java
xxxxSoapStub java
其次还有以下划线_xxxx???? java的文件都是序列化的对象 也就是返回的结果对应元素 可以暂时不理它 下面就以作者生成的示例做一个引用webservice的操作 作者得到的文件如下:
SearchFlightInfo java
SearchFlightInfoLocator java
SearchFlightInfoSoap java
SearchFlightInfoSoapStub java
_GetFlightInfoResponse_GetFlightInfoResult java
_GetstrFlightInfo java
_GetstrFlightInfoResponse java
C) 引用方法
基本思想是从得到web services后取得他的主体信息(返回的数据信息) 然后生成XML文件 然后再把XML文件转换成一个JAVA序列化对象就可以了
如下是序列化对象的代码
java 代码
try {
/**
* 取得前台的参数 航班日期 航班号
*/
String planDate = request getParameter( day );
String flyNo = request getParameter( hanbanno );
/**
* 按照最新版本制作 最新位置在
*/
SearchFlightInfo service = new SearchFlightInfoLocator();
SearchFlightInfoSoap client = service getSearchFlightInfoSoap();
_GetFlightInfoResponse_GetFlightInfoResult FOCInfo=client getFlightInfo(planDate flyNo);
String ErrorInfo = client getstrFlightInfo(planDate flyNo);//错误警告信息
MessageElement[] FOCElement = FOCInfo get_any();//取得xml信息
List FOCElementHead = FOCElement[ ] getChildren();//消息头 DataSet对象
List FOCElementBody = FOCElement[ ] getChildren();//消息体信息 DataSet对象
if (FOCElementBody size() = ){
//无返回记录 则无输出
return mapping findForward( NoRecord );
}
String nn = FOCElementBody get( ) toString();//消息体的字符串形式
String path = request getRealPath( );
CommonTools saveXMLString(nn path+ \\FOC\\heweiya xml );//保存为XML形式 其中FOC目录做为固定目录
/**
* 使用DOM J来解析这个序列化的对象
*/
//String path = request getRealPath( );
Vector OutFoc = CommonTools LoadXML(path + \\FOC\\heweiya xml );
request setAttribute( OutFoc OutFoc);
if (request getParameter( as ) != null) {
return mapping findForward( Foc );
}
return mapping findForward( Foc );
} catch (Exception e) {
/**
* 服务有异常 或者服务没有启动!
*/
request setAttribute( UserMsg Public FocError );
return mapping findForward( Fail );
}
如下是解析XML文件变换成一个序列化的对象的JAVA代码 (其中Vecto就相关于安全的LIST了)
/**
* 读取XML文件所有信息
*/
public static Vector LoadXML(String path) throws Exception {
Vector xmlVector = null;
FileInputStream fi = null;
try {
fi = new FileInputStream(path);
xmlVector = new Vector();
SAXBuilder *** = new SAXBuilder();
Document doc = *** build(fi);
Element root = doc getRootElement(); // 得到根元素
List focs = root getChildren(); // 得到根元素所有子元素的集合
Element foc = null;
FocBean xml = null;
/**
* 从 开始 因为 为错误警告信息
*/
for (int i = ; i focs size(); i++) {
xml = new FocBean();
foc = (Element) focs get(i); // 得到第一本书元素
/* xml setAta(foc getChild( ATA ) getText());
xml setAtd(foc getChild( ATD ) getText());
xml setEta(foc getChild( ETA ) getText());
xml setEtd(foc getChild( ETD ) getText());
xml setFltid(foc getChild( FLTID ) getText());
xml setSta(foc getChild( STA ) getText());
xml setStd(foc getChild( STD ) getText());
xml setTdwn(foc getChild( TDWN ) getText());
xml setToff(foc getChild( TOFF ) getText());*/
/**
* 如下是最新版本的取得实体对象的方法
* modify by heweiya
*/
xml setAta(foc getChild( ATA ) getText());
xml setAtd(foc getChild( ATD ) getText());
xml setEta(foc getChild( ETA ) getText());
xml setEtd(foc getChild( ETD ) getText());
xml setFltid(foc getChild( FLTID ) getText());
xml setSta(foc getChild( STA ) getText());
xml setStd(foc getChild( STD ) getText());
xml setTdwn(foc getChild( TDWN ) getText());
xml setToff(foc getChild( TOFF ) getText());
xml setAcown(foc getChild( ACOWN ) getText());
xml setActyp(foc getChild( ACTYP ) getText());
xml setArrstn(foc getChild( ARRSTN ) getText());
xml setDatop(foc getChild( DATOP ) getText());
xml setDepstn(foc getChild( DEPSTN ) getText());
xml setPlnid(foc getChild( Plnid ) getText());
xmlVector add(xml);
}
} catch (Exception e) {
System err println(e + error );
} finally {
try {
fi close();
} catch (Exception e) {
e printStackTrace();
}
}
return xmlVector;
}
还有一个代码如下
java 代码
// 把String 保存为文件
public static void saveXMLString(String XMLString String fileName)
throws IOException {
File file = new File(fileName);
if (file exists()) {
file delete();
}
file createNewFile();
if (file canWrite()) {
FileWriter fileOut = new FileWriter(file);
fileOut write(XMLString);
fileOut close();
}
lishixinzhi/Article/program/Java/hx/201311/26845
java如何解析xml格式的字符串
使用dom4j,在百度下搜一个dom4j包,然后在网上找个例子看dom4j操作xml的使用方法,很简单的。
怎么解析webservice返回的dataset数据
XML是一种数据格式,每一种类型的数据格式要求一个解析器来解析出的量使用,XML是无例外的信息。您可以使用SAX或DOM解析器来构建这当然,首先所有的数据,你需要首先确定该文件在什么位置。
验证用于验证符合文件格式的规定,这条规则可以是公开的,也可以是私有的。对于XML,公众完整性XML自身的最基本规则,另一种是某些协议,如SVG,WML
XMPP,等等;也就是说,你可以写自己专有的XML
Schema来指定一些你需要XML文档格式。
C# webservice返回DataSet类型,android怎么调用解析?
您好,这样的:
package test.webservice;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import test.webservice.R;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.os.AsyncTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ListView;
import android.os.PatternMatcher;
import java.util.Iterator;
import java.util.Set;
import java.util.List;
import android.app.ListActivity;
import android.graphics.Color;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.net.NetworkInfo;
import android.os.Build.VERSION;
public class kehu extends Activity{
EditText editText1;
TextView textView1;
Button button1;
ListView lv;
ArrayListMapString, Object list = new ArrayListMapString,Object();
public static String flags =””;
private SimpleAdapter listAdapter;
public static String phoneNum =””;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kehu);
editText1 = (EditText) findViewById(R.id.editText1);
textView1 = (TextView) findViewById(R.id.textView1);
button1 = (Button) findViewById(R.id.button1);
lv=(ListView)findViewById(R.id.ListView_detail);
textView1.setText(“请输入客户姓名!”);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
phoneNum = editText1.getText().toString().trim();
getRemoteInfo(phoneNum);
}
public void getRemoteInfo(String phoneSec) {
// 命名空间
String nameSpace = “”;
// 调用的方法名称
String methodName = “GetListfhkh”;
// EndPoint
String endPoint = “”;
// SOAP Action
String soapAction = “”;
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
// 设置需调用WebService接口需要传入的两个参数mobileCode、userId
rpc.addProperty(“khlxr”,phoneSec);
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
// 设置是否调用的是.Net开发的WebService
envelope.dotNet = true;////指定webservice的类型的(java,PHP,dotNet)
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
HttpTransportSE transport = new HttpTransportSE(endPoint);
try {
// 调用WebService
transport.call(soapAction, envelope);
} catch (Exception e) {
e.printStackTrace();
}
// 获取返回的数据
SoapObject object = (SoapObject) envelope.bodyIn;//在这里出现错误,因为webservice端返回的是一个dataset
// 获取返回的结果,这里添加数据,返回的是整数类型,也能被解析出来,就是dataset不能被正常解析,在删除操作的时候,返回的是布尔类型true,也能正确解析
//,这个就是返回dataset数据,如果能解决这个就能解决上面的问题
// 使用Map来表示列表数据
MapString, Object mapOne = new HashMapString, Object();
flags= object.getProperty(0).toString();
Pattern pattern=Pattern.compile(“ds=anyType\\{[^}]*\\};”);
Matcher m = pattern.matcher(flags);//import java.util.regex.Matcher;
while (m.find())
{
String tmp=m.group().replace(“ds=anyType{“,””);
String[] Strlen=tmp.split(“;”);
if(Strlen.length1)
{
mapOne = new HashMapString, Object(); //只要新建1个new map,就能预防值被覆盖的情况
String khbh=Strlen[0].split(“=”)[1];
String khqc=Strlen[1].split(“=”)[1];
mapOne.put(“user_name”,khbh);
mapOne.put(“user_pasword”,khqc);//map的键是不允许重复的,否则之前的值会被覆盖掉
list.add(mapOne);
}
}
String title=”查询结果如下:”;
textView1.setText(title);
listAdapter = new SimpleAdapter(this, list, R.layout.user, new String[] { “user_name”, “user_pasword” },new int[] { R.id.user_name, R.id.user_pasword });
// 设置显示ListView
lv.setAdapter(listAdapter);
}
}
以上代码在android真机2.2上测试通过,但是在4.0中无法测试通过(主线程不能访问网络),有没有哪位高手能帮忙修改,使其能在4.0版本以上也能正常访问网络。
关于java解析dataset和java解析xml文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。