【发布时间】:2013-12-10 07:24:11
【问题描述】:
我正在尝试通过 JAVA 解析 xml,但解析后我得到 org.apache.harmony.xml.dom.DocumentImpl@418b4c98。
这是我要解析的 XML,例如,我需要 id 数据是 5 和 default_image 是 https://www.10ngah.com/api/images/products/5/5
Xml
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<products>
<product>
<id>
<![CDATA[ 5 ]]>
</id>
<id_default_image xlink:href="https://www.10ngah.com/api/images/products/5/5"not_filterable="true">
<![CDATA[ 5 ]]>
</id_default_image>
<price>
<![CDATA[ 525 ]]>
</price>
<name>
<language id="1" xlink:href="https://www.10ngah.com/api/languages/1">
<![CDATA[ iPad 2 GB with Cellular ]]>
</language>
</name>
</product>
<product>
<id>
<![CDATA[ 6 ]]>
</id>
<id_default_image xlink:href="https://www.10ngah.com/api/images/products/6/6" not_filterable="true">
<![CDATA[ 6 ]]>
</id_default_image>
<price>
<![CDATA[ 525 ]]>
</price>
<name>
<language id="1" xlink:href="https://www.10ngah.com/api/languages/1">
<![CDATA[ iPad 2 GB with Cellular ]]>
</language>
</name>
</product>
</products>
</prestashop>
解析代码
package com.prestoshop.xmlparser;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.BaseAdapter;
import android.widget.Toast;
import com.prestoshop.beans.ProductItems;
import com.prestoshop.utils.Utils;
public class ProductLoaderTask extends AsyncTask<Void, ProductItems, Void> {
private Activity mContext;
private List<ProductItems> products;
private BaseAdapter adapter;
public ProductLoaderTask(Activity context, List<ProductItems> productList,
BaseAdapter adapter) {
mContext = context;
products = productList;
this.adapter = adapter;
}
static final String KEY_PRESTASHOP = "prestashop";
static final String KEY_ALL_PRODUCTS = "products";
@Override
protected Void doInBackground(Void... params) {
String url = Utils.PRODUCTS_URL;// use varargs just like an array
Log.e("urlll", "" + url);
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(url);
Log.e("string xml", "" + xml);
Document doc = parser.getDomElement(xml, mContext);
NodeList nl = doc.getElementsByTagName("product");
Log.e("noddd",""+nl);
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
Log.e("eeee", "" + e.toString());
Log.e("nodelist", ""
+ parser.getValue(e, "price").toString());
publishProgress(new ProductItems(
parser.getValue(e, "name"),
parser.getValue(e, "id"), parser.getValue(e,
"id_default_image"), 12.050000));
}
return null;
}
@Override
protected void onProgressUpdate(ProductItems... values) {
ProductItems product = values[0];
products.add(product);
adapter.notifyDataSetChanged();
}
@Override
protected void onPostExecute(Void result) {
Log.e("All done", products.toString());
super.onPostExecute(result);
}
}
【问题讨论】:
-
嗯,听起来您在文档上调用
toString(),而且看起来它还没有被覆盖。很遗憾,我们看不到您的代码,也不知道您要实现什么目标,因此很难为您提供帮助。 -
你在使用哪个解析器
XmlPullParser?developer.android.com/training/basics/network-ops/xml.html -
我在上面添加了我的java代码,我正在使用dom解析器。请帮帮我
-
@ashutiwari4 查看选择解析器下的文档,引用“推荐 XmlPullParser,这是在 Android 上解析 XML 的一种高效且可维护的方式”。还有一个例子可以在文档中解析 stackoverflow 的 rss fedd
-
@Raghunandan 我已经经历过了,解析后,日志中没有打印任何内容