Разбор XML Android, Documentbuilder выдает исключение - PullRequest
0 голосов
/ 24 января 2012

Итак, я пытаюсь проанализировать XML-файл в моем приложении для Android с помощью нодлиста и построителя документов.Проблема в том, что Documentbuilder.parse () всегда возвращает значение NULL и в итоге выдает IOException.Я предполагаю, что это как-то связано с неправильным путем к файлу.

public class EquiScoreActivity extends Activity 
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ProtocolFactory.GetProtocolFactory().LoadProtocol("EquiScore/assets/Protocols/LC1_2008.xml");
    }
}

public class ProtocolFactory 
{
    private static ProtocolFactory m_Instance = new ProtocolFactory();
    Document dom;

    private ProtocolFactory()
    {
    }

    public static ProtocolFactory GetProtocolFactory()
    {
        return m_Instance;
    }

    public Protocol LoadProtocol(String filename)
    {
        Protocol output = null;
        List<JudgementGroup> jGroups;
        List<GeneralAssesment> gAssesment;

        ParseXmlFile(filename);
        ParseDocument();

        return output;
    }


    private void ParseXmlFile(String filename)
    {
        //get the factory
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

        try 
        {
            //Using factory get an instance of document builder
            DocumentBuilder db = dbf.newDocumentBuilder();

            //parse using builder to get DOM representation of the XML file
            dom = db.parse(filename);
        }
        catch(ParserConfigurationException pce)
        {
            pce.printStackTrace();
        }
        catch(SAXException se) 
        {
            se.printStackTrace();
        }
        catch(IOException ioe) 
        {
            ioe.printStackTrace();
        }
    }

}

По сути, мне нужно знать, как получить правильный путь к файлу или какой-то другой (может быть, лучше?) Способ анализа XML.Каждый узел одного типа может иметь различное количество дочерних узлов, поэтому я решил, что этот подход будет хорошим.

Исключение IOException: "MalformedURLException" "Протокол не найден: EquiScore / assets / Protocols /LC1_2008.xml "

Я пробовал разные варианты имени файла, но, похоже, все равно получаю эту ошибку.

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Получаемое IOException связано с тем, что передаваемое имя является пустым путем, а DocumentBuilder.parse() ожидает URL-адрес.

Первая часть URL называется «протокол» (это http в http://www.google.com). Ваш путь не указывает протокол и, следовательно, ошибка гласит «Протокол не найден». Вы можете сделать URL из пути, добавив к нему file://.

Кроме того, вы можете создать объект File или FileInputStream и передать его в DocumentBuilder.parse(), так как метод перегружен. Например, как это:

dom = db.parse(new File(filename));

РЕДАКТИРОВАТЬ: поскольку ваш файл находится в папке assets/, вы можете использовать AssetManager.open(), который возвращает InputStream, что, в свою очередь, принимается одной из перегруженных версий DocumentBuilder.parse():

AssetManager assetManager = ...
dom = db.parse(assetManager.open("Protocols/LC1_2008.xml"));
1 голос
/ 24 января 2012

Очевидно, что вы поместили XML в папку ресурсов, поэтому вы должны использовать AssetManager для получения InputStream для анализа.

Примерно так:

Context context = ...;
AssetManager assManager = context.getAssets();
DocumentBuilder db = ..;
db.parse(assManager.open("Protocols/LC1_2008.xml"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...