根元素名称不匹配。预计
问题描述:
我使用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架构验证。不幸的是,在这里我不能。
谢谢!
答
需要在您的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(...);
您是否尝试指定KML名称空间;例如RootElement root = new RootElement('“http://opengis.net/kml/2.2”',“kml”) – JasonM1
@ JasonM1谢谢你的解决。一个愚蠢的问题是,由于URL是“harcdcoded”,如果他们将来改变KML的名称空间会发生什么。该应用程序会再次崩溃,对吧? – Javi
命名空间需要匹配你正在解析的内容,否则再次得到解析错误。 – JasonM1