Java 如何在android中以编程方式解析url中的XML
我正在尝试解析来自Magento for android的XML格式响应 我的回答是: 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
<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();
改装文档:
好的教程:我会使用类似于库的改装来完成这项工作。如何完成这项工作有任何教程吗上面的编码对我来说很好,但我无法获得..如何获得此编码中的父节点和子节点请以这种方式帮助我..我会使用类似于库的改装来完成这项工作。如何完成这项工作有任何教程吗上面的编码对我来说很好,但是我无法获得..如何获得此编码中的父节点和子节点请以这种方式帮助我。。