我想解析一个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());
有谁知道为什么这个属性会引发解析错误?
非常感谢任何帮助! 伊恩
答案 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解析器的点。任何更好的想法都是非常受欢迎的!