我与我的webservices(SOAP)建立连接,这是我从webservices收到的xml结果,如何在没有SAX解析器的情况下解析这个结果......
<maintag>
<item>
<name>AndroidPeople</name>
<website category="android">www.androidpeople.com</website>
</item>
<item>
<name>iPhoneAppDeveloper</name>
<website category="iPhone">www.iphone-app-developer.com</website>
</item>
</maintag>
编辑:/我想知道用Kxmlparser解析这个结果,有人能告诉我怎么样?
非常感谢!
SOAP FILE
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.TextView01);
// Maak een nieuw Soap Request object en parameter
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("GUID","4fe78-a4s4df8-65a4sd-465as4a");
request.addProperty("InstallVersion","1");
// Soapenvelope versie van webservice
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
envelope.setOutputSoapObject(request);
// Transport gegevens vanaf URL
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.call(SOAP_ACTION, envelope);
SoapPrimitive resultsString = (SoapPrimitive)envelope.getResponse();
tv.setText("Result :" + resultsString);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:4)
根据您的Web服务,您获得的响应将是SoapPrimitive或SoapObject。最喜欢它是一个更复杂的响应,因此你的代码
SoapPrimitive resultsString = (SoapPrimitive)envelope.getResponse();
应该用这样的东西替换
SoapObject response = (SoapObject)envelope.getResponse();
反过来又具有属性和属性以及响应中的值。在那里设置一个断点并对其进行实时检查可能是最容易的。
您还可以查看我的wiki文档,了解如何调试并查看原始xml请求和响应: http://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks
答案 1 :(得分:0)
Java有一个内置的XML解析器。您可以在此处查看我最近执行此操作的文件样本:https://github.com/LeifAndersen/NetCatch/blob/master/src/net/leifandersen/mobile/android/netcatch/services/RSSService.java(位于页面底部)
以下是您最感兴趣的三种方法:
private static Document getRSS(Context context, boolean backgroundUpdate,
String url) {
if (!Tools.checkNetworkState(context, backgroundUpdate))
return null;
// Network is available get the document.
try {
Document doc;
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
doc = builder.parse(response.getEntity().getContent());
return doc;
} catch (IOException e) {
return null; // The network probably died, just return null
} catch (SAXException e) {
// Problem parsing the XML, log and return nothing
Log.e("NCRSS", "Error parsing XML", e);
return null;
} catch (Exception e) {
// Anything else was probably another network problem, fail silently
return null;
}
}
private static Show getShowFromRSS(Context context, Document feed,
String feedUrl) {
try {
// There should be one channel in the feed, get it.
// Also, the cast should be okay if the XML is formatted correctly
NodeList item = feed.getElementsByTagName("channel");
Element el = (Element)item.item(0);
String title;
NodeList titleNode = el.getElementsByTagName("title");
if (titleNode == null || titleNode.getLength() < 1)
title = context.getString(R.string.default_title);
else
title = titleNode.item(0).getFirstChild().getNodeValue();
String author;
NodeList authorNode = el.getElementsByTagName("author");
if (authorNode == null || authorNode.getLength() < 1)
author = context.getString(R.string.default_author);
else
author = authorNode.item(0).getFirstChild().getNodeValue();
String desc;
NodeList descNode = el.getElementsByTagName("comments");
if (descNode == null || descNode.getLength() < 1)
desc = context.getString(R.string.default_comments);
else
desc = descNode.item(0).getFirstChild().getNodeValue();
String imageUrl;
NodeList imagNode = el.getElementsByTagName("image");
if(imagNode != null) {
Element ima = (Element)imagNode.item(0);
if (ima != null) {
NodeList urlNode = ima.getElementsByTagName("url");
if(urlNode == null || urlNode.getLength() < 1)
imageUrl = null;
else
imageUrl =
urlNode.item(0).getFirstChild().getNodeValue();
} else
imageUrl = null;
} else
imageUrl = null;
return new Show(title, author, feedUrl, desc, imageUrl, -1, -1);
} catch (Exception e) {
// Any parse errors and we'll log and fail
Log.e("NCRSS", "Error parsing RSS", e);
return null;
}
}
private static List<Episode> getEpisodesFromRSS(Context context,
Document feed) {
try {
ArrayList<Episode> episodes = new ArrayList<Episode>();
NodeList items = feed.getElementsByTagName("item");
for(int i = 0; i < items.getLength(); i++) {
// Fetch the elements
// Safe if it's an actual feed.
Element el = (Element)items.item(i);
String title;
NodeList titleNode = el.getElementsByTagName("title");
if (titleNode == null || titleNode.getLength() < 1)
title = context.getString(R.string.default_title);
else
title = titleNode.item(0).getFirstChild().getNodeValue();
String author;
NodeList authorNode = el.getElementsByTagName("author");
if (authorNode == null || authorNode.getLength() < 1)
author = context.getString(R.string.default_author);
else
author = authorNode.item(0).getFirstChild().getNodeValue();
String date;
NodeList dateNode = el.getElementsByTagName("pubDate");
if (dateNode == null || dateNode.getLength() < 1)
date = context.getString(R.string.default_date);
else
date = dateNode.item(0).getFirstChild().getNodeValue();
String desc;
NodeList descNode = el.getElementsByTagName("comments");
if (descNode == null || descNode.getLength() < 1)
desc = context.getString(R.string.default_comments);
else
desc = descNode.item(0).getFirstChild().getNodeValue();
String url;
NodeList urlNode = el.getElementsByTagName("enclosure");
if (urlNode == null || urlNode.getLength() < 1)
url = "";
else {
Element urlEl = (Element)urlNode.item(0);
if(urlEl == null)
url = "";
else
url = urlEl.getAttribute("url");
}
// Convert the date string into the needed integer
// TODO, use a non-depricated method
long dateMills;
try {
dateMills = Date.parse(date);
} catch (Exception e) {
dateMills = 0;
}
// Add the new episode
// ShowId and played doesn't really matter at this point
episodes.add(new Episode(title, author, desc, "", url,
dateMills, 0, false));
}
return episodes;
} catch (Exception e) {
// Any parse errors and we'll log and fail
Log.e("NCRSS", "Error parsing RSS", e);
return null;
}
}