【问题标题】:Parse XML file in Android在 Android 中解析 XML 文件
【发布时间】:2013-01-10 12:18:20
【问题描述】:

我正在开发一个用于在线投票的应用程序,其中登录过程是通过 dotnet 中的 web 服务进行的。网络服务部分已准备就绪并且可以工作,但我想看看返回了什么响应。

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

我从网上得到了这个,但我想解析下面给出的响应。

<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>

有什么建议吗?

提前谢谢你。

【问题讨论】:

    标签: android web-services xml-parsing


    【解决方案1】:

    您可以使用 Xpath (http://developer.android.com/reference/javax/xml/xpath/package-summary.html)。如果我的回答正确,您的回答是“respdoc”。 要选择 login_validation 节点,您必须这样做:

    XPath xpath = XPathFactory.newInstance().newXPath();
    String expression = "/login/login_validation";
    Node loginValidation = (Node) xpath.evaluate(expression, respdoc, XPathConstants.NODE);
    

    选择 voter_id 节点:

    expression = "/login/voter_id";
    Node voterId = (Node) xpath.evaluate(expression, respdoc, XPathConstants.NODE);
    

    之后,您可以使用 loginValidation 和 voterId 为所欲为。

    【讨论】:

    • 感谢您的回复。但是无论如何我可以从中看到整个响应,例如 javascript 中的 console.log() ?
    • 好吧,您可以添加以下行:Log.i("Log_tag",loginValidation.getNodeValue());获取 loginValidation 的响应(在你的情况下它将是 1,2 或 3)
    • 我使用了类似这样的 NodeList nl = respdoc.getElementsByTagName("login"); // 获取响应码 Element response = (Element) nl.item(0);字符串 responseCode = response.getAttribute("login_validation"); Log.i("RESPONSE",responseCode);
    • 这是正确的,因为我没有得到任何日志。即使我使用上面的代码来记录响应代码,它也会导致错误,loginValidation 是节点类型,而 Log.i 需要字符串。谢谢
    • 请尝试:Log.i("Log_tag",loginValidation.getTextContent());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多