根元素名称不匹配。预计

问题描述:

我使用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架构验证。不幸的是,在这里我不能。

谢谢!

+1

您是否尝试指定KML名称空间;例如RootElement root = new RootElement('“http://opengis.net/kml/2.2”',“kml”) – JasonM1

+0

@ JasonM1谢谢你的解决。一个愚蠢的问题是,由于URL是“harcdcoded”,如果他们将来改变KML的名称空间会发生什么。该应用程序会再次崩溃,对吧? – Javi

+0

命名空间需要匹配你正在解析的内容,否则再次得到解析错误。 – JasonM1

需要在您的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(...);