-1

私はC#のバックグラウンドを持ち、Androidは初めてです。.NET から生成された XML ファイルを解析しようとしています。実際には、複数のテーブルを持つ XMLDataSet です。以下に示すように

<XMLDataSet xmlns="http://tempuri.org/XMLDataSet.xsd">
    <table1>
        <row1>value</row1>
        <row2>value</row2>
        <row3>value</row3>
    </table1>
    <table1>
        <row1>value</row1>
        <row2>value</row2>
        <row3>value</row3>
    </table1>
    <table2>
        <row1>value</row1>
        <row2>value</row2>
        <row3>value</row3>
    </table2>
    <table2>
        <row1>value</row1>
        <row2>value</row2>
        <row3>value</row3>
    </table2>
</XMLDataSet>

等々。このxmlを解析して「リスト」を取得したいと思います。C# では、XMLDataSet と xmlDataSet.Tables["table1"] を使用して解析し、リストを取得します。しかし、XmlPullParser を使用して、andriod で複数のルート要素を持つ XML を解析できません。私が遭遇したすべての例は、単一のルート XML を解析する方法を示しています。複数のルートを持つ XML ファイルの解析を手伝ってくれる人がいますか。

4

1 に答える 1

0

これを試して..

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;

public class NetActivity extends Activity {

    String urls = "Your URL";

    // Progress dialog
    ProgressDialog pDialog;


    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_net);

         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
             new XmlParsing(urls).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
         else
             new XmlParsing(urls).execute(new String[]{null});


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public class XmlParsing extends AsyncTask<String, Void, String> {

        // variables passed in:
        String urls;
        //  constructor
        public XmlParsing(String urls) {
            this.urls = urls;
        }

        @Override
        protected void onPreExecute() {
            pDialog = ProgressDialog.show(NetActivity.this, "Fetching Details..", "Please wait...", true);
        }


        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            URL url;
            try {

                url = new URL(urls);
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new InputSource(url.openStream()));

                doc.getDocumentElement().normalize();

                NodeList nodeList = doc.getElementsByTagName("table1");

                for (int i = 0; i < nodeList.getLength(); i++) {

                    Node node = nodeList.item(i);       

                    Element fstElmnt = (Element) node;
                    NodeList nameList = fstElmnt.getElementsByTagName("row1");
                    Element nameElement = (Element) nameList.item(0);
                    nameList = nameElement.getChildNodes();

                    System.out.println("row1 : "+(((Node) nameList.item(0)).getNodeValue()));

                }

                NodeList nodeList1 = doc.getElementsByTagName("table2");

                for (int i = 0; i < nodeList1.getLength(); i++) {

                    Node node = nodeList1.item(i);      

                    Element fstElmnt = (Element) node;
                    NodeList nameList = fstElmnt.getElementsByTagName("row1");
                    Element nameElement = (Element) nameList.item(0);
                    nameList = nameElement.getChildNodes();

                    System.out.println("row1 : "+(((Node) nameList.item(0)).getNodeValue()));

                }

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // Now we have your JSONObject, play around with it.
            if (pDialog.isShowing())
                pDialog.dismiss();


        }

    }

}
于 2013-10-18T07:23:46.050 に答える