Android:解析XML文件中的图片和数据
我有一个以下格式的xml文件:Android:解析XML文件中的图片和数据,android,xml,image,rss,adapter,Android,Xml,Image,Rss,Adapter,我有一个以下格式的xml文件: <rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> <channel> <item> <cache>0</cache> <id>v_article_16276.html</id> <article_id>16276</article_id> <type>article&l
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<item>
<cache>0</cache>
<id>v_article_16276.html</id>
<article_id>16276</article_id>
<type>article</type>
<img>
http://www.mywebsite.com/image.jpg
</img>
<datePub>
<![CDATA[ 25.03.2013 | 17h37 | Par Fabrice Antonio ]]>
</datePub>
</item>
</channel>
</rss>
0
v_article_16276.html
16276
文章
图片必须采用@+id/thumb图像视图,title采用@id/title TextView,pubdate采用@date TextView
多谢各位
Android:解析XML文件中的图片和数据
所以,首先,若你们的数据源被放在互联网上,你们需要获取它以备下一步工作。为此,您可以将HttpClient
与适当的GET
请求一起使用,然后从响应XML
中进行绘图
然后需要使用一些XML解析器。您可以使用classicDOM解析器来实现您的目标。首先,您需要获取
的节点列表
,然后只需获取下一项的元素
伪代码:
从Internet获取数据:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="2dp" >
<ImageView
android:id="@+id/thumb"
android:layout_width="60dp"
android:layout_height="60dp"
android:contentDescription="@string/app_name"
android:src="@drawable/ic_launcher" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/arrow"
android:layout_toRightOf="@+id/thumb"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="@string/title"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginTop="5dp"
android:padding="2dp"
android:text="@string/date"
android:textColor="#7F7F7F"
android:textSize="10sp" />
</RelativeLayout>
<ImageView
android:id="@+id/arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:contentDescription="@string/app_name"
android:src="@drawable/arrow_next" />
</RelativeLayout>
帮助方法getElementValue()
注:
最后,如果您正在执行网络操作,您必须将代码放在单独的/后台线程中,最好的选择是
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(<url>);
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
String xml = EntityUtils.toString(entity);
Document doc = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
doc = builder.parse(is);
NodeList nodeList = doc.getElementsByTagName("item");
for (int i = 0; i < nodeList.getLength(); i++) {
Element e = (Element) nodeList.item(i);
String img = getElementValue(e, "img");
String pubDate = getElementValue(e, "datePub");
String type = getElementValue(e, "type");
}
public String getElementValue(Element e, String key) {
NodeList nodes = e.getElementsByTagName(key);
Node n = nodes.item(0);
if (n != null) {
return n.getFirstChild().getNodeValue();
}
return "";
}