在Android中解析XML文件

在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

我正在开发一个用于在线投票的应用程序,其中的登录过程是通过dotnet中的webservice进行的。webservice部分已经准备好并正在工作,但我想看看返回了什么响应

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());