Android DOM анализ с сущностями в тегах - PullRequest
0 голосов
/ 16 февраля 2011

Я мог бы проанализировать следующий XML-файл, содержащий записи.

<node>
    <text><title>foo fo &lt;BR&gt;bar bar </title></text>
</node>

Синтаксический анализ работает.Но после входов я не получаю никакого вывода.Использование CDATA невозможно на этой позиции.

Я использую следующий код:

        urlConnection.getInputStream());
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setExpandEntityReferences(false);
        DocumentBuilder builder = factory.newDocumentBuilder();
        doc = builder.parse(in);

У кого-нибудь есть идеи?

Спасибо заранее!

Ответы [ 3 ]

0 голосов
/ 17 февраля 2011

http://code.google.com/p/android/issues/detail?id=2607

Я узнал, у других есть похожая проблема. Есть ошибки в Android 2.0.1 и 2.1. Я решил эту проблему с помощью синтаксического анализатора саксофона.

0 голосов
/ 01 мая 2014

Меня зовут Диви Дхиман, я старший разработчик Android

Я выполнил синтаксический анализ XML тем же способом, что вы можете сделать это по сущности или по узлу, выбирая буквальный контроль, зависящий от вас.1003 *

закрытый класс MyAsyncTask расширяет AsyncTask {

    @Override
    protected String doInBackground(String... abc) {

        try {

            URL url = new URL(jksbvlds);

            URLConnection connection;
            connection = url.openConnection();

            HttpURLConnection httpConnection = (HttpURLConnection) connection;
             int responseCode = httpConnection.getResponseCode();
             if(responseCode == HttpURLConnection.HTTP_OK)
             {

                 InputStream in = httpConnection.getInputStream();
                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                 DocumentBuilder db = dbf.newDocumentBuilder();
                 Document dom = db.parse(in);

                 Element docEle = dom.getDocumentElement();
                 NodeList nl = docEle.getElementsByTagName("quote");
                 if(nl != null && nl.getLength()>0)
                 {
                     for(int i = 0; i<nl.getLength();i++ )
                     {
                         StockInfo theStock = getStockInformation(docEle);


                         name = theStock.getName();
                         yearLow = theStock.getYearLow();
                         yearHigh = theStock.getYearHigh();
                         daysLow = theStock.getDaysLow();
                         daysHigh = theStock.getDaysHigh();
                         lastTradePriceonly = theStock.getLastTradePriceonly();
                         change = theStock.getChange();
                         daysRange = theStock.getDaysRange();

                     }
                 }



             }

        } 

        catch(MalformedURLException e)
        {
            Log.d(TAG,"MalformedURLException",e);
        }
        catch(IOException e)
        {
            Log.d(TAG,"IOException",e);
        }
        catch (ParserConfigurationException e) {
            Log.d(TAG,"ParserConfigurationException", e);
            }
        catch (SAXException e) {
            Log.d(TAG,"SAXException",e);

        }
        finally{}

        return null;
0 голосов
/ 17 февраля 2011

CDATA использование никогда не требуется;так что это не проблема и не решение.Но как вы на самом деле говорите, что нет текста?Вполне возможно, что у вас просто есть несколько смежных текстовых узлов - базовые парсеры часто возвращают несколько текстовых сегментов (и особенно, когда есть сущности).Вы можете использовать метод DOM, чтобы «нормализовать» текстовое содержимое, которое содержит Элемент, чтобы заменить соседние текстовые узлы только одним.Но без этого вы никогда не должны предполагать, что весь текст находится в первом (и единственном) текстовом узле.

Если нет узлов, возможно, пакеты парсера Android содержат ошибки.Я думаю, что они включают в себя старую версию xpp или что-то еще, и это может иметь проблемы (по сравнению с более отточенными парсерами, такими как Xerces или Woodstox).Но я бы сначала убедился, что это не просто случай «скрытых» узлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...