2016-11-23 103 views
-1

我使用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

回答

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(...);