2016-11-23 10 views
-1

ハンドラが存在しないSAX APIのAndroid簡易版を使用して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... 

私の問題は、

RootElement root = new RootElement("kml");

に私の呼び出しは私にこのようなエラーを与えてクラッシュしていることですこの本を読むつもりですが、それでもエラーが発生しています。私はこれにスタックオーバーフロー時に他のポストを見ましたが、SAXParserFactoryに関連しており、XML Schemaの検証を無効にすることができます。残念ながら、ここで私はできません。

ありがとうございます!

+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(...); 
関連する問題