0

RSS フィード値 (XML 形式) の読み取り中にこのエラーが発生します。

XMLファイルにプレーンテキスト値があるが、HTML要素がある場合、ヘッダーと説明を正常に取得しています<p>, <HTML>, <image>. など.. XMLファイルでは、データが表示されていません。

このURL を使用して XML データを取得しています。

この説明タグから HTML オブジェクト、つまり Img タグを使用したいと考えています。どうすればこれを入手できますか?

コードは次のとおりです。

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

XMLParser parser = new XMLParser(); 
String xml = parser.getXmlFromUrl(URL);             
Document doc = parser.getDomElement(xml); // getting DOM element

NodeList nl = doc.getElementsByTagName(KEY_ITEM);       

// looping through all song nodes <song>
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_PUB_DATE, parser.getValue(e, KEY_PUB_DATE));
    map.put(KEY_DESCRIPTION, parser.getValue(e, KEY_DESCRIPTION));      
    business_List.add(map);
}       
list = (ListView)findViewById(R.id.list);

// Getting adapter by passing xml data ArrayList
adpater = new LazyAdapter(this, business_List);
list.setAdapter(adpater);
}

===== これが私の xmlparserclass ===

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);

        System.out.println("XML...." + xml);

       } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
       } catch (ClientProtocolException e) {
        e.printStackTrace();
       } catch (IOException e) {
            e.printStackTrace();
       }
            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));
    }
}    
4

1 に答える 1

0

説明フィールドで解析されていない html を取得しているようで、その中からさらにデータを抽出したいと考えています。

これを行うには、html パーサーを使用する必要があります。考慮すべき適切なパーサーはjsoupです。jsoup cookbookを見れば、使い始めることができます。

他の html パーサーも利用できるかもしれませんが、これは android で動作すると確信しています。

ただし、本物のパーサーを使用してください。正規表現を使用して html を解析しようとは考えないでください。

于 2012-08-04T12:47:00.907 に答える