Я работаю над приложением для Android 1.5. В настоящее время мне нужно проанализировать XML-файл. Поскольку Android не поддерживает XPath изначально на уровне API 3, я решил использовать библиотеки dom4j и jaxen для чтения файла.Android 1.5 и dom4j - имена атрибутов разобраны неправильно
У меня есть простой 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, находит "/ тесты/тест" узел и переберет это атрибуты. Когда я запускаю этот код как часть «настольных» приложений 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 - selection "/ tests/test/@ name" ничего не дает, а "/ tests/test/@ base_lang" дает мне строку "main name". Это, очевидно, вызвано той же ошибкой, что и в перечисленных выше атрибутах.
Кто-нибудь сталкивался с этим? Как я могу это исправить?
Переход на новый Android с поддержкой родной XPath, к сожалению, не является для меня вариантом.
Я пытался найти что-нибудь в Интернете и здесь, но не повезло.