Я работаю над приложением для Android 1.5.В настоящее время мне нужно разобрать файл XML.Поскольку Android не поддерживает XPath в API уровня 3, я решил использовать библиотеки dom4j и jaxen для чтения файла.
У меня есть простой XML-файл (test1.xml):
<?xml version="1.0" encoding="utf-8" ?>
<tests>
<resources base_lang="en">
<string base="example">
<localization lang="pl">Przykład</localization>
</string>
</resources>
<test name="main name">
<title>Main Title</title>
<description>Long description</description>
</test>
</tests>
И простой код:
SAXReader reader = new SAXReader();
Document doc = reader.read("file:///sdcard/tests/test1.xml");
Node node = doc.selectSingleNode("/tests/test");
Element elem = (Element)node;
for(int j=0;j<elem.attributeCount();++j) {
Attribute attr = elem.attribute(j);
Logger.getLogger(AutoTesterMain.class.getName()).log(Level.SEVERE, "ATTR: "+attr.getName()+"="+attr.getValue());
}
Он читает файл test1.xml, находит узел "/ tests / test" и перечисляет его атрибуты.Когда я запускаю этот код как часть «настольного» Java-приложения (я не очень разбираюсь в терминологии Java), он отображает то, что я ожидаю (OpenJDK 1.8.3 под Fedora Linux):
SEVERE: ATTR: name=main name
К сожалениюв Android 1.5 (эмулятор ofc) точно такой же код показывает:
E/AutoTesterMain( 823): ATTR: base_lang=main name
Как видите, значение атрибута в порядке, но есть проблема с именем.Я совершенно не представляю, почему в этом месте появляется имя атрибута из совершенно другого элемента DOM ("/ tests / resources").Кажется, он неправильно анализирует мой файл, поэтому я, вероятно, установил что-то неправильно ...
Конечно, обе версии используют одинаковые .jars с библиотеками dom4j и jaxen, так что это, вероятно, нормально.
Эта проблема имеет больше последствий, чем только неправильный список атрибутов.Он также не позволяет мне правильно читать атрибуты, используя XPath - выбор "/ tests / test / @ name" ничего не дает, а "/ tests / test / @ base_lang" дает мне строку "main name".Это, очевидно, вызвано той же ошибкой, что и в приведенном выше списке атрибутов.
Кто-нибудь сталкивался с этим?Как я могу это исправить?
Переход на более новый Android с собственной поддержкой XPath, к сожалению, не вариант для меня.
Я пытался найти что-нибудь в Интернете и здесь, но безуспешно.