парсинг текста с html-тегами

Мне нужно проанализировать файл xml с сервера; Я пытался с парсером DOm и парсером Sax, но я не могу анализировать теги html, и он останавливается, когда находит первый «‹»

Это мой класс парсера:

public class XMLParser {

    // constructor
    public XMLParser() {

    }


    public String getXmlFromUrl(String url) {
        String xml = null;
        BufferedReader in = null;

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

            HttpResponse httpResponse = httpClient.execute(httpPost);
            in =  new BufferedReader(new InputStreamReader(
                    httpResponse.getEntity().getContent(), "UTF-8"));


            StringBuffer sb=new StringBuffer("");
             String line = "";
             String NL = System.getProperty("line.separator");

             while ((line = in.readLine()) != null)
                {
                    sb.append(line );
                    sb.append(NL );
                    line=in.readLine();
                }
             in.close();

            xml = sb.toString();;

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

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


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

  }

person mir    schedule 19.05.2012    source источник


Ответы (2)


Если ваш HTML неправильно сформирован (например, содержит незакрывающиеся теги), ни один из этих синтаксических анализаторов не будет работать. Возможно, вам придется выполнять синтаксический анализ вручную (например, с помощью регулярных выражений и класс Pattern). Если HTML-код правильный, вы должны указать, какую ошибку вы получаете, и, возможно, ссылку на страницу.

person Melllvar    schedule 19.05.2012
comment
ссылка Вы считаете, что этот html некорректен!?? - person mir; 19.05.2012
comment
Я не эксперт, но это похоже на документ XML с заголовком HTML. Ваш начальник должен начать с исправления заголовка (см. w3schools.com/xml) - person Melllvar; 19.05.2012

Вы должны использовать парсер HTML, потому что большая часть html-контента, доступного в Интернете, не соответствует спецификации XML. В простых случаях достаточно регулярных выражений, но в сложных случаях вам может понадобиться анализатор HTML.

person Hakan Serce    schedule 19.05.2012
comment
у меня нет выбора, я должен сделать это с помощью xmlparser !! :( - person mir; 19.05.2012
comment
Тогда у вас нет выбора, потому что, как я объяснил, синтаксические анализаторы XML просто непригодны для использования. Кстати, а зачем вам XML-парсер? - person Hakan Serce; 19.05.2012
comment
это проект, и босс попросил меня сделать это с помощью парсера xml O.o - person mir; 19.05.2012