我正在尝试构建一个应用程序来阅读此Feed: http://loc.grupolusofona.pt/index.php/?format=feed 它工作得很好,除了它到达元素时,它只是跳过它,留空. 继承人我得到了什么: public class AndroidXMLParsi
它工作得很好,除了它到达元素时,它只是跳过它,留空.
继承人我得到了什么:
public class AndroidXMLParsingActivity extends ListActivity { // All static variables static final String URL = "http://loc.grupolusofona.pt/index.php/?format=feed"; // XML node keys static final String KEY_ITEM = "item"; // parent node static final String KEY_ID = "id"; static final String KEY_TITLE = "title"; static final String KEY_DESC = "description"; static final String KEY_LINK = "link"; static final String KEY_PUBDATE = "pubDate"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); XMLParser parser = new XMLParser(); String xml = parser.getXmlFromUrl(URL); // getting XML Document doc = parser.getDomElement(xml); // getting DOM element NodeList nl = doc.getElementsByTagName(KEY_ITEM); // looping through all item nodes <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(KEY_ID, parser.getValue(e, KEY_ID)); map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); map.put(KEY_LINK, parser.getValue(e, KEY_LINK)); map.put(KEY_PUBDATE, parser.getValue(e, KEY_PUBDATE)); // adding HashList to ArrayList menuItems.add(map); } // Adding menuItems to ListView ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.list_item, new String[] { KEY_TITLE, KEY_DESC, KEY_PUBDATE, KEY_LINK }, new int[] { R.id.title, R.id.desc, R.id.pub, R.id.link}); setListAdapter(adapter); // selecting single ListView item ListView lv = getListView(); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // getting values from selected ListItem String title = ((TextView) view.findViewById(R.id.title)).getText().toString(); String description = ((TextView) view.findViewById(R.id.desc)).getText().toString(); String link = ((TextView) view.findViewById(R.id.link)).getText().toString(); // Starting new intent System.out.println("Title: " + title); System.out.println("Link: " + link); System.out.println("Description:" + description); Intent in = new Intent(Intent.ACTION_VIEW); in.setData(Uri.parse(link)); startActivity(in); } }); } }
和XMLParser:
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(); 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)); }
}
对于我做错了什么的任何想法?
谢谢
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 ""; }
您正在使用此代码在解析描述时给出null.
我尝试使用您的代码并获取描述内容.
我用
child.getTextContent()
它给了我内容.
将您的代码更改为
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.getNodeName().equalsIgnoreCase("description")) { return child.getTextContent(); } if( child.getNodeType() == Node.TEXT_NODE ){ return child.getNodeValue(); } } } } return ""; }
你也得到了描述的内容..,.试试吧..,.