나는 항상 XML 문서의 줄 바꿈과 공백이 무시되었다고 생각 했습니까? 그것이 오해입니까, 아니면 제 코드에 부족한 부분이 있습니까?파일에 개행이있을 때 XML 구문 분석이 실패합니까?
다음과 같은 현상이 발생합니다. 서버에서 검색 한 XML 문서를 구문 분석하고 있습니다. 이 작업은 모든 내용이 한 줄에 있지만 XML 문서가 들여 쓰기 될 때 실패합니다.
내 코드 : XML 파일<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0"><Document>
<GeometryCollection><LineString><coordinates>These are the coordinates</coordinates></LineString></GeometryCollection>
</Document></kml>
입니다 그러나 파일이있는 경우 실패
public class JsonTestActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
Log.d("xxx", "on create started");
try {
URL url = new URL("http://www.morefast.be/gethistory.php");
HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.connect();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(urlConnection.getInputStream());
String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getFirstChild().getNodeValue() ;
Log.d("xxx", "path is "+path);
}
catch (Exception e) {
Log.d("xxx", e.getMessage());
}
}
}
작품 미세 (예)
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0"><Document>
<GeometryCollection>
<LineString><coordinates>These are the coordinates</coordinates></LineString></GeometryCollection>
</Document></kml>
내가 그 파일에 변경된 모든 "GeometryCollection"뒤에 추가 개행을 추가했습니다.
로그 캡쳐보기
07-30 20:44:48.364: ERROR/AndroidRuntime(545): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.jsontest/com.mydomain.jsontest.JsonTestActivity}: java.lang.NullPointerException: println needs a message
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.os.Looper.loop(Looper.java:123)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at dalvik.system.NativeStart.main(Native Method)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): Caused by: java.lang.NullPointerException: println needs a message
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.util.Log.println_native(Native Method)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.util.Log.d(Log.java:122)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at com.mydomain.jsontest.JsonTestActivity.onCreate(JsonTestActivity.java:43)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-30 20:44:48.364: ERROR/AndroidRuntime(545): ... 11 more
예상 되나요? 나는 XML 문서가 공백을 무시했다고 생각했었다.
'println은 메시지가 필요합니다'는'path' 문자열이 null 일 때'Log.d ("xxx", "path is"+ path);와 관련이 있습니다. 그것이 의미가 있는지보기 위해 올린 답변을보십시오. – Squonk
@MisterSquonk하지만 str "+ null"은 유효하고''str "'이됩니다. 그래서 나는 그 특별한 예외에 대해 질문합니다. 하지만 예, 당신의 대답은 제 가설과 일치합니다 ;-) –
@MisterSquonk 글쎄, 대부분 동의합니다. 텍스트 노드가 자식 노드를 가질 수있는 방법을 잘 모르겠습니다 ... –