内容:编码的XMLParser android

时间:2012-08-14 12:45:56

标签: android xml parsing xml-parsing

好的,关于这个具体情况,我有大量的XML文件应该在Android中进行解析和显示,其中部分内容在这里:

.
.
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/:
.
.
<item>
<title>RTS1</title>
<pubDate>Tue, 14, Aug 2012</pubDate>
<content:encoded><![CDATA[6:00 Vesti<br>06:05 Jutarnji program<br>08:15 Jutarnji dnevnik
<br>09:00 Kamiondzije .................. 23:15 Film<br>]]>
</content:encoded>
<item>

在我的主要应用程序中,我做到了这一点:

public class Main extends ListActivity {  

// All static variables  
static final String URL = "http://tvprofil.net/rss/feed/channel-group-2.xml";  
// XML node keys  
static final String KEY_ITEM = "item"; // parent node  
static final String KEY_NAME = "title";  
static final String KEY_DATE = "pubDate";  
static final String KEY_DESC = "content:encoded";  

@Override  
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.activity_main);  


ArrayList<HashMap<String,String>> menuItems = new ArrayList<HashMap<String,String>>();  



XMLParser parser = new XMLParser();  
String xml = parser.getXmlFromUrl(URL); //get XML  
Document doc = parser.getDomElement(xml); // get DOM elem.  



NodeList nl = doc.getElementsByTagName(KEY_ITEM);  
//loop  
for (int i=0; i< nl.getLength(); i++){  
    HashMap<String, String> map = new HashMap<String, String>();  
    Element e = (Element) nl.item(i);  
    //add to map  
    map.put(KEY_NAME, parser.getValue(e, KEY_NAME));  
    map.put(KEY_DATE, parser.getValue(e, KEY_DATE));  
    map.put(KEY_DESC, parser.getValue(e, KEY_DESC));  

    // hash => list  
    menuItems.add(map);  
}  

ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.list_item,  
        new String[]{KEY_NAME, KEY_DESC, KEY_DATE}, new int[]{  
        R.id.name, R.id.description, R.id.date  
});  
setListAdapter(adapter);  

//singleView  
ListView lv = getListView();  

lv.setOnItemClickListener(new OnItemClickListener(){  
    @Override  
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){  
        String name = ((TextView)view.findViewById(R.id.name)).getText().toString();  
        String date = ((TextView)view.findViewById(R.id.date)).getText().toString();  
        String description = ((TextView)view.findViewById(R.id.description)).getText().toString();  

        //intent  
        Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);  
        in.putExtra(KEY_NAME, name);  
        in.putExtra(KEY_DATE, date);  
        in.putExtra(KEY_DESC, description);  
        startActivity(in);  
    }  
});  

}  

}  
请仔细看看:

static final String KEY_DESC = "content:encoded";

我试过了:

static final String KEY_DESC = "encoded";

甚至与:

static final String KEY_DESC = "http://purl.org/rss/1.0/modules/content/encoded";

但没有任何作用..当我设置它或在手机上时,也没有在Log.w中显示任何内容......

我甚至会发布解析器类,我不希望有任何混淆:

    public class XMLParser {  

// constructor  
public XMLParser() {  

}  

/** 
 * Getting XML from URL making HTTP request 
 * @param url string 
 * */  
public String getXmlFromUrl(String url) {  
String xml = null;  


try {  
    // defaultHttpClient  
    DefaultHttpClient httpClient = new DefaultHttpClient();  
    HttpPost httpPost = new HttpPost(url);  

    HttpResponse httpResponse = httpClient.execute(httpPost);  
    HttpEntity httpEntity = httpResponse.getEntity();  
    xml = EntityUtils.toString(httpEntity);  

} catch (UnsupportedEncodingException e) {  
    e.printStackTrace();  
} catch (ClientProtocolException e) {  
    e.printStackTrace();  
} catch (IOException e) {  
    e.printStackTrace();  
}  
// return XML  
return xml;  
}  

/** 
 * Getting XML DOM element 
 * @param XML string 
 * */  

public Document getDomElement(String xml){  

Document doc = null;  
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
dbf.setCoalescing(true);  
try {  

    DocumentBuilder db = dbf.newDocumentBuilder();  

    InputSource is = new InputSource();  
        is.setCharacterStream(new StringReader(xml));  
        doc = db.parse(is);   

    } catch (ParserConfigurationException e) {  
        Log.e("Error: ", e.getMessage());  
        return null;  
    } catch (SAXException e) {  
        Log.e("Error: ", e.getMessage());  
        return null;  
    } catch (IOException e) {  
        Log.e("Error: ", e.getMessage());  
        return null;  
    }  

    return doc;  
}  

/** Getting node value 
  * @param elem element 
  */  
 public final String getElementValue( Node elem ) {  

 Node child;  
 if( elem != null){  
     if (elem.hasChildNodes()){  
         for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){  
             if( child.getNodeType() == Node.TEXT_NODE  ){  
                 return child.getNodeValue();  
             }  
         }  
     }  
 }  
 return "";  
 }  

 /** 
  * Getting node value 
  * @param Element node 
  * @param key string 
  * */  
 public String getValue(Element item, String str) {       
        NodeList n = item.getElementsByTagName(str);          
        return this.getElementValue(n.item(0));  
    }  
    } 

0 个答案:

没有答案