在Android中解析XML文件
我正在开发一个用于在线投票的应用程序,其中的登录过程是通过dotnet中的webservice进行的。webservice部分已经准备好并正在工作,但我想看看返回了什么响应在Android中解析XML文件,android,web-services,xml-parsing,Android,Web Services,Xml Parsing,我正在开发一个用于在线投票的应用程序,其中的登录过程是通过dotnet中的webservice进行的。webservice部分已经准备好并正在工作,但我想看看返回了什么响应 URL url=new URL("http://www.example.com/login"); HttpURLConnection urlconnection=(HttpURLConnection)url.openConnection(); String requestXML
URL url=new URL("http://www.example.com/login");
HttpURLConnection urlconnection=(HttpURLConnection)url.openConnection();
String requestXML="<data><username>sachin.t@gmail.com</username><password>sachin</password></data>";
urlconnection.setRequestMethod("POST");
urlconnection.setDoInput(true);
urlconnection.setDoOutput(true);
urlconnection.setRequestProperty("Accept-Charset", "UTF-8");
urlconnection.setRequestProperty("Content-type", "application/xml");
urlconnection.setRequestProperty("Content-Length", ""+Integer.toString(requestXML.length()));
//Send request
DataOutputStream dout=new DataOutputStream(urlconnection.getOutputStream());
dout.writeBytes(requestXML);
dout.flush();
dout.close();
if(urlconnection.getResponseCode()==HttpURLConnection.HTTP_OK)
{
InputStream is=urlconnection.getInputStream();
BufferedReader breader=new BufferedReader(new InputStreamReader(is));
String temp;
String resp="";
while((temp=breader.readLine())!=null)
{
resp+=temp;
}
Document respdoc=null;
DocumentBuilderFactory docbuilderfactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docbuilder=docbuilderfactory.newDocumentBuilder();
InputSource isource=new InputSource();
isource.setCharacterStream(new StringReader(resp));
respdoc=docbuilder.parse(isource);
URL=新URL(“http://www.example.com/login");
HttpURLConnection urlconnection=(HttpURLConnection)url.openConnection();
String requestXML=“sachin。t@gmail.comsachin";
urlconnection.setRequestMethod(“POST”);
urlconnection.setDoInput(true);
urlconnection.setDoOutput(true);
setRequestProperty(“接受字符集”、“UTF-8”);
setRequestProperty(“内容类型”、“应用程序/xml”);
urlconnection.setRequestProperty(“内容长度”,“整数+Integer.toString(requestXML.Length()));
//发送请求
DataOutputStream dout=新的DataOutputStream(urlconnection.getOutputStream());
写字节(requestXML);
dout.flush();
dout.close();
if(urlconnection.getResponseCode()==HttpURLConnection.HTTP\u确定)
{
InputStream is=urlconnection.getInputStream();
BufferedReader breader=新的BufferedReader(新的InputStreamReader(is));
字符串温度;
字符串resp=“”;
而((temp=breader.readLine())!=null)
{
resp+=温度;
}
单据respdoc=null;
DocumentBuilderFactory docbuilderfactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docbuilder=docbuilderfactory.newDocumentBuilder();
InputSource isource=新的InputSource();
isource.setCharacterStream(新StringReader(resp));
respdoc=docbuilder.parse(isosource);
我从网络上得到了这个,但我想解析下面给出的响应
<login>
<login_validation>"1/2/3"</login_validation>
( 1-invalid username,2-successfull and 3- already voted)
<voter_id>" 0/voter_id "</voter_id>
(if sucessfull then only voter_id else value will return 0)
</login>
"1/2/3"
(1-无效用户名,2-成功,3-已投票)
“0/投票者id”
(如果成功,则只有投票者id else值将返回0)
有什么建议吗
提前感谢您。您可以使用Xpath(http://developer.android.com/reference/javax/xml/xpath/package-summary.html).如果我没弄错,你的回答是“respdoc”。
要选择登录验证节点,必须执行以下操作:
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/login/login_validation";
Node loginValidation = (Node) xpath.evaluate(expression, respdoc, XPathConstants.NODE);
要选择投票者id节点,请执行以下操作:
expression = "/login/voter_id";
Node voterId = (Node) xpath.evaluate(expression, respdoc, XPathConstants.NODE);
之后,您可以使用loginValidation和voterId执行任何操作。您可以使用Xpath(http://developer.android.com/reference/javax/xml/xpath/package-summary.html).如果我没弄错,你的回答是“respdoc”。
要选择登录验证节点,必须执行以下操作:
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/login/login_validation";
Node loginValidation = (Node) xpath.evaluate(expression, respdoc, XPathConstants.NODE);
要选择投票者id节点,请执行以下操作:
expression = "/login/voter_id";
Node voterId = (Node) xpath.evaluate(expression, respdoc, XPathConstants.NODE);
之后,您可以使用loginValidation和voterId做任何您想做的事情。谢谢您的回复。但是,是否有其他方法可以让我看到整个响应,比如javascript中的console.log()?wel,您可以添加以下行:log.I(“log_标记”,loginValidation.getNodeValue());以获取loginValidation的响应(在您的例子中,它将是1、2或3)我使用了类似这样的NodeList nl=respdoc.getElementsByTagName(“login”);//获取响应代码元素response=(元素)nl.item(0);字符串responseCode=response.getAttribute(“login_validation”);Log.I(“response”,responseCode);这是否正确,因为我没有得到任何日志。即使我使用了上面的代码来记录导致错误的响应代码,loginValidation的类型也是node和log。我需要string.ThanksPlease try:log.I(“log_标记”,loginValidation.getTextContent());感谢您的回复。但是,我是否可以从中看到整个响应,如javascript中的console.log()?wel,您可以添加以下行:log.I(“log_标记”,loginValidation.getNodeValue());为了获得loginValidation的响应(在您的情况下,它将是1、2或3),我使用了类似于NodeList nl=respdoc.getElementsByTagName的东西(“login”);//获取响应代码元素response=(元素)nl.item(0);字符串responseCode=response.getAttribute(“登录验证”);Log.i(“响应”,responseCode);这是否正确,因为我没有得到任何日志。即使我使用了您上面的代码来记录导致错误的响应代码,loginValidation的类型也是node和log。我需要string.ThanksPlease try:log.I(“log_标记”,loginValidation.getTextContent());