Ошибка Android parse xml - имя корневого элемента не совпадает - PullRequest
0 голосов
/ 10 ноября 2011

Я хочу проанализировать документ gpx (xml), который начинается следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1  http://www.topografix.com/GPX/1/1/gpx.xsd" creator="Ian">

При разборе я получаю следующую ошибку:

android.sax.BadXmlException: Line 1: Root element name does not match. Expected: 'gpx', Got: 'http://www.topografix.com/GPX/1/1:gpx'

Однако, если я затем удалю атрибут xmlns="http://www.topografix.com/GPX/1/1" - он отлично разбирается.

Код, который я использую для анализа: android.util.Xml.parse(is,Xml.Encoding.UTF_8,gpx.getContentHandler());

Кто-нибудь знает, почему этот атрибут вызывает ошибку разбора?

Любая помощь очень ценится! Ian

Ответы [ 4 ]

1 голос
/ 07 декабря 2011

Когда вы создаете свой rootElement, у вас есть возможность указать пространство имен ...

final RootElement rootElement = new RootElement ("http://www.topografix.com/GPX/1/1"," gpx ");

0 голосов
/ 10 ноября 2011

Вы определяете пространство имен с помощью xmlns (поэтому все имена ваших тегов будут начинаться с того, что вы определяете в этом атрибуте), которое, я думаю, схема не распознает.

0 голосов
/ 10 ноября 2011

Я до сих пор не понял, как решить проблему, однако, если у кого-то еще есть такая же проблема, вы можете использовать регулярное выражение для удаления атрибута xmlns из xml.

private static InputStream stripDeclaration(InputStream is) throws UnsupportedEncodingException {
    String string = new Scanner(is).useDelimiter("\\A").next();
    string = string.replaceFirst("xmlns=\".*?\"", "");
    return new ByteArrayInputStream(string.getBytes("UTF-8") );     
}

Это не идеально, так как вам нужно создать строку из вашего XML-файла enitre, которая почти не использует точку синтаксического анализатора. Любые лучшие идеи приветствуются!

0 голосов
/ 10 ноября 2011

Это недопустимый XML, я думаю, вам просто не хватает </gpx> в конце, или вы можете просто закрыть его, выполнив /> в конце.

...