Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中以编程方式解析url中的XML_Java_Android_Xml_Magento - Fatal编程技术网

Java 如何在android中以编程方式解析url中的XML

Java 如何在android中以编程方式解析url中的XML,java,android,xml,magento,Java,Android,Xml,Magento,我正在尝试解析来自Magento for android的XML格式响应 我的回答是: XML格式响应: <response> <id>3</id> <parent_id>1</parent_id> <name>Arocos</name> <is_active>true</is_active> <position>2</position> <level

我正在尝试解析来自Magento for android的XML格式响应 我的回答是:

XML格式响应:

    <response>
<id>3</id>
<parent_id>1</parent_id>
<name>Arocos</name>
<is_active>true</is_active>
<position>2</position>
<level>1</level>
<product_count>35</product_count>
<children_data>
<item>
<id>5</id>
<parent_id>3</parent_id>
<name>DHOOP CONES</name>
<is_active>true</is_active>
<position>1</position>
<level>2</level>
<product_count>4</product_count>
<children_data/>
</item>
<item>
<id>6</id>
<parent_id>3</parent_id>
<name>SAMBRANI STEMS</name>
<is_active>true</is_active>
<position>2</position>
<level>2</level>
<product_count>2</product_count>
<children_data/>
</item>
</response>
}

我的主要活动是:

public class MainActivity extends Activity {
    // Declare Variables
    ListView listview;
    ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    static String RANK = "item";
    static String COUNTRY = "name";
    static String POPULATION = "is_active";
    static String FLAG = "flag";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from listview_main.xml
        setContentView(R.layout.listview_main);
        // Execute DownloadJSON AsyncTask
        new DownloadXML().execute();
    }

    // DownloadJSON AsyncTask
    private class DownloadXML extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Create a progressdialog
            mProgressDialog = new ProgressDialog(MainActivity.this);
            // Set progressdialog title
            mProgressDialog.setTitle("Android XML Parse Tutorial");
            // Set progressdialog message
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            // Show progressdialog
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            // Create an array
            arraylist = new ArrayList<HashMap<String, String>>();

            XMLParser parser = new XMLParser();
            // Retrieve nodes from the given URL address
            String xml = parser
                    .getXmlFromUrl("http://arocos.com/index.php/rest/V1/categories/");
            // Retrive DOM element
            Document doc = parser.getDomElement(xml);

            try {
                // Identify the element tag name
                NodeList nl = doc.getElementsByTagName("item");
                for (int i = 0; i < nl.getLength(); i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);

                    // adding each child node to HashMap key => value
                    map.put(RANK, parser.getValue(e, RANK));
                    map.put(COUNTRY, parser.getValue(e, COUNTRY));
                    map.put(POPULATION, parser.getValue(e, POPULATION));
                    map.put(FLAG, parser.getValue(e, FLAG));
                    // adding HashList to ArrayList
                    arraylist.add(map);
                }
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void args) {
            // Locate the listview in listview_main.xml
            listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(MainActivity.this, arraylist);
            // Binds the Adapter to the ListView
            listview.setAdapter(adapter);
            // Close the progressdialog
            mProgressDialog.dismiss();
        }
    }
}
公共类MainActivity扩展活动{
//声明变量
列表视图列表视图;
ListViewAdapter适配器;
进程对话框;
ArrayList ArrayList;
静态字符串RANK=“item”;
静态字符串COUNTRY=“name”;
静态字符串填充=“处于活动状态”;
静态字符串FLAG=“FLAG”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//从listview_main.xml获取视图
setContentView(R.layout.listview_main);
//执行下载JSON异步任务
新下载的xml().execute();
}
//下载JSON异步任务
私有类下载XML扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建一个progressdialog
mProgressDialog=新建ProgressDialog(MainActivity.this);
//设置进程对话框标题
setTitle(“Android XML解析教程”);
//设置进程对话框消息
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
//显示进度对话框
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//创建一个数组
arraylist=新的arraylist();
XMLParser=新的XMLParser();
//从给定的URL地址检索节点
字符串xml=语法分析器
.getXmlFromUrl(“http://arocos.com/index.php/rest/V1/categories/");
//检索DOM元素
Document doc=parser.getdoElement(xml);
试一试{
//标识元素标记名
NodeList nl=doc.getElementsByTagName(“项目”);
对于(int i=0;ivalue
put(RANK,parser.getValue(e,RANK));
put(COUNTRY,parser.getValue(e,COUNTRY));
put(POPULATION,parser.getValue(e,POPULATION));
put(FLAG,parser.getValue(e,FLAG));
//将哈希列表添加到ArrayList
arraylist.add(map);
}
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void args){
//在listview_main.xml中找到listview
listview=(listview)findViewById(R.id.listview);
//将结果传递到ListViewAdapter.java中
adapter=新的ListViewAdapter(MainActivity.this,arraylist);
//将适配器绑定到ListView
setAdapter(适配器);
//关闭progressdialog
mProgressDialog.disclose();
}
}
}
请帮助我,并指示我写一个正确的编码。。。
提前感谢。

使用XmlPullParserFactory

XmlPullParserFactory factory;
                        try {
                            factory = XmlPullParserFactory.newInstance();
                            factory.setNamespaceAware(true);
                            XmlPullParser responseParser = factory.newPullParser();
                            responseParser.setInput(new StringReader("Your Response"));
                            int eventType = responseParser.getEventType();
                            while (eventType != XmlPullParser.END_DOCUMENT) {
                                if (eventType == XmlPullParser.TEXT) {
                                    if (responseParser.getText().equals("Your key to check")) {
                                        //Your code
                                    } else {
                                       //Your code
                                    }
                                }
                                eventType = responseParser.next();
                            }
                        } catch (XmlPullParserException | IOException e) {
                            e.printStackTrace();
                        } finally {
                           // Your code
                        }

唯一的条件是“您应该有字符串响应”

使用XmlPullParserFactory

XmlPullParserFactory factory;
                        try {
                            factory = XmlPullParserFactory.newInstance();
                            factory.setNamespaceAware(true);
                            XmlPullParser responseParser = factory.newPullParser();
                            responseParser.setInput(new StringReader("Your Response"));
                            int eventType = responseParser.getEventType();
                            while (eventType != XmlPullParser.END_DOCUMENT) {
                                if (eventType == XmlPullParser.TEXT) {
                                    if (responseParser.getText().equals("Your key to check")) {
                                        //Your code
                                    } else {
                                       //Your code
                                    }
                                }
                                eventType = responseParser.next();
                            }
                        } catch (XmlPullParserException | IOException e) {
                            e.printStackTrace();
                        } finally {
                           // Your code
                        }

唯一的条件是“您应该有字符串响应”

一个简单的方法是使用XML解析器进行改装。通常,改型用于发出请求并将JSON解析为Java对象。但是您可以指定改型以使用
SimpleXmlConverterFactory

确保在构建改装对象时使用它:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(<url>)
                .addConverterFactory(SimpleXmlConverterFactory.create())
                .build();
reformation-reformation=new-reformation.Builder()
.baseUrl()
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
改装文档:


好的教程:

一个简单的方法是使用XML解析器进行改装。通常,改型用于发出请求并将JSON解析为Java对象。但是您可以指定改型以使用
SimpleXmlConverterFactory

确保在构建改装对象时使用它:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(<url>)
                .addConverterFactory(SimpleXmlConverterFactory.create())
                .build();
reformation-reformation=new-reformation.Builder()
.baseUrl()
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
改装文档:


好的教程:

我会使用类似于库的改装来完成这项工作。如何完成这项工作有任何教程吗上面的编码对我来说很好,但我无法获得..如何获得此编码中的父节点和子节点请以这种方式帮助我..我会使用类似于库的改装来完成这项工作。如何完成这项工作有任何教程吗上面的编码对我来说很好,但是我无法获得..如何获得此编码中的父节点和子节点请以这种方式帮助我。。