2016-10-18 1 views
0

구문 분석에 대한 질문이 있습니다 (Android Studio). 특히 뭔가에 관한 것이 아닙니다. 내 코드가 실행되지 않습니다. 오류 없음. 단추를 누르고 XML 파일에서 파싱 된 특정 텍스트를 표시 할 수 있기를 원합니다.XML 간단한 구문 분석

지금, 나는 버튼 부분을 생략 할 테니 (응용 프로그램/SRC/메인/자산 follder. articles.xml) 단지 겸손 텍스트 뷰에

XML 코드를이 텍스트를 인쇄하는 당신에게 코드를 던져

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE articles[ 
<!ELEMENT articles ANY> 
<!ELEMENT article ANY> 
<!ATTLIST article ID ID #IMPLIED> ]> 
<articles> 
<article ID="a1">TEST 
</article> 
<article ID="a2">1.TEST2 
</article> 

나는 기술을 시도하지 않은

package com.blah.blah; 

import android.content.res.AssetManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

import java.io.IOException; 
import java.io.InputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

public class MainActivity extends AppCompatActivity { 

TextView textView; 
String stringArticle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    AssetManager assetManager = this.getAssets(); 
    InputStream inputStream = null; 

    try { 

     // Loads your XML file as an InputStream 
     inputStream = assetManager.open("articles"); 

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(inputStream); 

     Element article = doc.getElementById("a1"); 
     String stringArticle = article.getTextContent(); 

     TextView textView = (TextView) findViewById(R.id.textView); 
     textView.setText(stringArticle); 

    } catch (IOException e) { 
     // Exception Handling Code 
     e.printStackTrace(); 
    }catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } 
} 
}   

클래스 코드 그것은 당신에게 Nodelist를 돌려줍니다. 왜냐하면 나는 아무것도 반복하지 않기 때문입니다. 내 프로젝트에는 쓸모가 없다. 내가 원한 것은 매우 원시적 인 무엇인가입니다. 그 간단한 성경 앱과 같습니다. 운문과 함께 버튼을 누르면 해당 텍스트가 나타납니다. 간단합니다.

그리고 다시 오류가 없습니다! 그냥 일하지 않아. 나는 TRY 부분이 실행되지 않는다고 생각한다. 그것은 TextView에서 기본 'hello world'텍스트를 제공하기 때문입니다. 그러나 일단 내가 넣으면

TextView textView = (TextView) findViewById(R.id.textView); 
textView.setText(stringarticle); 

줄이 TRY/CATCH 블록 뒤에 오면 빈 TextView가 생깁니다.

TY!

+2

['getElementById()'] (https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Document.html#getElementById-java.lang)의 javadoc을 읽었습니까? .끈-)? *주의 : "ID"또는 "id"라는 이름을 가진 속성은 그렇게 정의되지 않는 한 타입 ID가 아니다. DTD가 없으므로 XML에 "type ID"속성이 없으므로 getElementById() '는 널 (Null)을 리턴하여 다음 행에서'NullPointerException'을 일으키며, "No errors"문이 완전히 거짓임을 증명합니다. 오류가 발생하여 다시보아야합니다. – Andreas

+0

예, 읽었습니다. 그리고 그것은 그것에 대해 생각하게했습니다. 그것은 XML 내 처음과 내가 오류를 얻을하지 않습니다 확신하기 때문에하지만 ... 을 관심을 지불하지 않았다 나는 지금에 내 XML을 변경 : ]> <문서 ID = "1"> blah

asdf
지금 오류 : "속성 ID는 여기에 허용되지 않습니다." –

+0

XML 코드를 업데이트했습니다.더 이상 문제가 없어야한다고 생각합니다. 고맙습니다. 아직도 나는 아무 결과도 얻지 않는다. 매니 페스트에 선언해야 할 것이 있습니까? XML? 스키마 물건처럼? –