2016年9月1日 星期四

Parser XML on Android

XML file
<Response>
    <Type>1</Type>
    <Content>
        想睡覺
    </Content>
    <NodeId>00147070853775200944005056ba786b</NodeId>
    <ModuleId>core</ModuleId>
    <Similarity>1.0</Similarity>
    <Commands>
    <Command name="weather" state="1">
    <Arg>北京</Arg>
    <Arg/>
    <Arg/>
    </Command>
    </Commands>
    <RelatedQuestions>
        <Question>123</Question>
        <Question>456</Question>
    </RelatedQuestions>
</Response>

public class MainActivity extends AppCompatActivity {
    private Handler mHandler = new MainActivityHandler(this);
    public static Button btnDomstic, btnForegin;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GetData getMegaNumber = new GetData();
        getMegaNumber.getData();
    }
}

public class httpGetXML {
    public String getHtmlByGet(String _url) {
        String result = "";
        HttpClient client = new DefaultHttpClient();
        try {
            HttpGet get = new HttpGet(_url);
            HttpResponse response = client.execute(get);
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null)
            {
                //result = EntityUtils.toString(resEntity);
                result = EntityUtils.toString(response.getEntity(),"UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client.getConnectionManager().shutdown();
        }
        return result;
    }
}

public class GetData {
    String TAG="GetData";
    String retstrXML;
    String retstr;
    ExecutorService executor = Executors.newFixedThreadPool(1);
    runGetXml gXML = new runGetXml();
    Future<String> future = executor.submit(gXML);
    Document doc;
    public void getData ()
    {
        try {
            retstrXML = future.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        doc=getDomElement(retstrXML);
        NodeList nl = doc.getElementsByTagName("Content");
        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++) {
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            retstr = nl.item(i).getTextContent();
            Log.i(TAG, "aaaaaaaaaa2="+retstr);
        }
    }

    private class runGetXml implements Callable<String>
    {
        String ret;
        @Override
        public String call() throws Exception {
            httpGetXML hGet = new httpGetXML();
            ret=hGet.getHtmlByGet("http://Html Address to link a XML data by html-get);
            Log.i(TAG, "ret="+ret);
        return ret;
        }
    }

    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is);
        } catch (ParserConfigurationException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (IOException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        }
        Log.i(TAG, "doccccccc="+doc);
        // return DOM
        return doc;
    }

    public String getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        return this.getElementValue(n.item(0));
    }

    public final String getElementValue( Node elem ) {
        Node child;
        if( elem != null){
            if (elem.hasChildNodes()){
                for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                    if( child.getNodeType() == Node.TEXT_NODE  ){
                        return child.getNodeValue();
                    }
                }
            }
        }
        return "";
    }
}
ref : android-xml-parsing-tutorial

沒有留言:

張貼留言