Android解析xml错误 - 根元素名称不匹配

时间:2011-11-09 22:24:43

标签: android xml saxparser

我想解析一个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());

有谁知道为什么这个属性会引发解析错误?

非常感谢任何帮助! 伊恩

4 个答案:

答案 0 :(得分:1)

创建rootElement时,您有机会指定命名空间...

  

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

答案 1 :(得分:0)

它不是有效的XML,我认为你最后只是遗漏了</gpx>,或者你可以通过最后的/>自行关闭它。

答案 2 :(得分:0)

您正在使用xmlns定义命名空间(因此您的所有标记名称都将以您在此属性中定义的任何内容开头),我猜这个架构无法识别。

答案 3 :(得分:0)

我还没有找到解决问题的方法,但是如果其他人遇到同样的问题,你可以使用正则表达式从xml中删除xmlns属性。

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") );     
}

这不是理想的,因为您需要从enitre xml文件中创建一个字符串,这几乎会破坏sax解析器的点。任何更好的想法都是非常受欢迎的!