gpt4 book ai didi

android - 将 xml 数据解析为哈希表并显示在 ListView 中?

转载 作者:行者123 更新时间:2023-11-29 00:46:58 26 4
gpt4 key购买 nike


我有个问题。我有多个记录,在 SAX 从需要插入哈希表并显示在 ListView 中的 xml 文件中进行解析后。我能够在 ListView 中显示数据,但它给出的只是 ListView 中所有行的相同数据。我认为这与我的哈希表编码或 SAX 解析有关。

这是我试图从网上检索数据的 xml 文件:http://spark.opac.tp.edu.sg/X?op=present&set_no=007584&set_entry=000000001,000000002,000000003,000000004,000000005&format=marc

下面是我的处理程序,我将数据放入哈希表中:

ArrayList<Hashtable<String,String>> list = new ArrayList<Hashtable<String,String>>();

Hashtable<String,String> data = new Hashtable<String,String>();

private final String MY_DEBUG_TAG = "Debugging~";

private Boolean in_record = false;
private Boolean in_author = false;
private Boolean in_format = false;
private Boolean in_title = false;
private Boolean in_callNumber = false;

private String format = "";
private String title = "";
private String author = "";
private String callNumber = "";

//private SearchList sList;

//public SearchList getListData() {
// return this.sList;
//}

@Override
public void startDocument() throws SAXException {
// this.sList = new SearchList();
}

@Override
public void endDocument() throws SAXException {
// Nothing to do
}

/** Called when tag starts ( ex:- <name>AndroidPeople</name>
* -- <name> )*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(localName.equalsIgnoreCase("record")) {
this.in_record = true;
}
else
if (localName.equalsIgnoreCase("fixfield")) {
if (attributes.getValue("id").equalsIgnoreCase("FMT")) {
this.in_format = true;
}
}
else
if(localName.equalsIgnoreCase("varfield")) {
if(attributes.getValue("id").equalsIgnoreCase("100")) {
this.in_author = true;
}
else
if(attributes.getValue("id").equalsIgnoreCase("245")) {
this.in_title = true;
}
else
if(attributes.getValue("id").equalsIgnoreCase("099")) {
this.in_callNumber = true;
}
}
}

public void characters(char[] ch, int start, int length)
throws SAXException {

StringBuffer sb = new StringBuffer();
String finalString;
String originalString = "";

String chars = new String(ch, start, length);
chars = chars.trim();

if (this.in_format) {
sb.append(chars);
finalString = sb.toString();
this.format = finalString;
}
else
if (this.in_author) {
if(!(chars.equals(""))) {
sb.append(chars);
finalString = sb.toString();
originalString = this.author + finalString;
this.author = originalString;
}
}
else
if (this.in_title) {
if(!(chars.equals(""))) {
sb.append(chars);
finalString = sb.toString();
originalString = this.title + finalString;
this.title = originalString;
}
}
else
if (this.in_callNumber) {
if(!(chars.equals(""))) {
sb.append(chars);
finalString = sb.toString();
this.callNumber = finalString;
}
}
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {

if (localName.equalsIgnoreCase("record")) {
this.in_record=false;
}
else
if (localName.equalsIgnoreCase("fixfield")) {
if (this.in_format) {
//set the foundCharacter to Hashtable
data.put("format", this.format);
//sList.setFormat(this.format);
Log.d(MY_DEBUG_TAG,"Format = " + this.format);
this.in_format = false;
}
}
else
if(localName.equalsIgnoreCase("varfield")) {
if (this.in_author) {
//set the foundCharacter to Hashtable
data.put("author", this.author);
//sList.setAuthor(this.author);
Log.d(MY_DEBUG_TAG,"Author = " + this.author);
this.in_author = false;
}
else
if (this.in_title) {
//set the foundCharacter to Hashtable
data.put("title", this.title);
//sList.setTitle(this.title);
Log.d(MY_DEBUG_TAG,"Title = " + this.title);
this.in_title = false;
}
else
if (this.in_callNumber) {
//set the foundCharacter to Hashtable
data.put("callNumber", this.callNumber);
//sList.setCallNumber(this.callNumber);
Log.d(MY_DEBUG_TAG,"Call Number = " + this.callNumber);
this.in_callNumber = false;
}
}
//add the hashtable into ArrayList
list.add(data);
}

有什么建议吗?

最佳答案

我没有时间完整地阅读你的代码......

但这是一个简单的例子:

ListView myListView;
myListView = (ListView) findViewById(R.id.mylistview);
ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;

//load your data
String[][] items = database.getItems("Blog");

//check if the database was empty
if(items != null){
for(int i = 0; i < items[0].length; i++) {
map = new HashMap<String, String>();
map.put("pubdate", items[2][0]);
map.put("title", items[0][i]);
map.put("description", items[1][i]);
listItem.add(map);

}

//Creation of a SimpleAdapter to put items in your list (listitems) in your listview
// You need to have a xml file called list_full_news_item with elements
// called android:id="@+id/title" etc.
SimpleAdapter mSimpleAdaptor = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.list_full_news_item,
new String[] {"pubdate", "title", "description"}, new int[] {R.id.itemPubdate, R.id.itemTitle, R.id.itemDescription});
//Assign to the listView the created adapter
myListView.setAdapter(mSimpleAdaptor);
}

希望这能帮助您理解。

关于android - 将 xml 数据解析为哈希表并显示在 ListView 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5879018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com