我正在使用Android简化版SAX API解析KML文件,其中没有处理程序。问题是我打电话给
RootElement root = new RootElement("kml");
崩溃,给我一个这样的错误:
java.lang.RuntimeException: android.sax.BadXmlException: Line 2: Root element name does not match. Expected: 'kml', Got: 'http://www.opengis.net/kml/2.2:kml'
这是要解析的文件的开头:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> etc...
我正在阅读这本书,但它仍然导致错误。我在堆栈上看到了其他帖子溢出,但它们与SAXParserFactory有关,您可以在其中禁用XML Schema验证。不幸的是,在这里我不能。
谢谢!
答案 0 :(得分:1)
需要在RootElement中指定KML名称空间以匹配KML文件中的内容,否则将获得解析异常。从技术上讲,未指定命名空间是一个具有空URI的特殊命名空间。
final String KML_NAMESPACE = "http://opengis.net/kml/2.2";
RootElement root = new RootElement(KML_NAMESPACE, "kml");
// ...
XMLReader reader = ...;
reader.setContentHandler(root.getContentHandler());
reader.parse(...);