2011-02-02 3 views
0

android에서 responseText라는 xml 문자열을 구문 분석하는 데 약간의 문제가 있습니다. XML은 완전히 유효하며 다음과 같은 구조를 가지고 :xml android의 구문 분석 문자열

<plan> 
<entry> 
<name>john</name> 
<address>uk</address> 
</entry> 
<entry> 
<name>joe</name> 
<address>usa</address> 
</entry> 
</plan> 

다음과 내가 문자열을 구문 분석하는 데 사용하고 코드가 될 때 :

try { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     InputSource is = new InputSource(); 

     is.setCharacterStream(new StringReader(responseText)); 

     Document doc = db.parse(is); 
     NodeList nodes = doc.getElementsByTagName("entry"); 

     for (int i = 0; i < nodes.getLength(); i++) { 

      Element element = (Element) nodes.item(i); 

      NodeList name = ((Document) element) 
        .getElementsByTagName("name"); 
      Element line = (Element) name.item(0); 
      Toast.makeText(Containers.this, 
        getCharacterDataFromElement(line), Toast.LENGTH_SHORT) 
        .show(); 

      NodeList title = ((Document) element) 
        .getElementsByTagName("address"); 
      line = (Element) title.item(0); 
      Toast.makeText(Containers.this, 
        getCharacterDataFromElement(line), Toast.LENGTH_SHORT) 
        .show(); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static String getCharacterDataFromElement(Element e) { 
    Node child = ((Node) e).getFirstChild(); 
    if (child instanceof CharacterData) { 
     CharacterData cd = (CharacterData) child; 
     return cd.getData(); 
    } 
    return "?"; 

} 

난 그냥 XML 데이터를 인쇄하는 간단한 토스트를 사용하고 있습니다를 화면에. 그러나 for 루프를 입력하면 IO 예외가 발생합니다. 어떤 생각이 잘못 됐습니까?

+0

IOException의 전체 내용을 게시하십시오. –

+0

전체 텍스트는 어떻게받을 수 있습니까? 그것은 실제로 IoException이 아닐 수도 있습니다 - 나는 그것이 예외를 입력한다는 것을 알고 있지만, 나는 logcat 일을보고 있었고 ioexception은 내 전화에서 오류와 관련이있을 수 있습니다. stacktrace는 어디에 인쇄됩니까? 또는 어떻게 활성화시킬 수 있습니까? –

+0

stacktrace를 추가하십시오. – vsm

답변

8

올바른 패키지에서 유형을 가져 오시겠습니까?

import org.w3c.dom.Element; 

하고 다시 시도에

import java.io.StringReader; 

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

import org.w3c.dom.CharacterData; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import android.sax.Element; // Wrong Element class 

변경 마지막으로 가져온 비슷 해요.

+0

이것이 잘못된 문제입니다. 잘못 가져 왔습니다. 내가 그걸 어떻게 관리했는지 모르겠다! 감사. –

+0

좋습니다! 내가 실수 한 같은 실수 ... –

+0

와우! 이클립스 자동 가져 오기는 정말로 때때로 덤비가 될 수있다. .. 고맙다 ton ... 정확한 같은 문제를 품었다 – Shark

1

루프 내부에서 IOException을 일으킬 수있는 어떤 것도 표시되지 않습니다.

그러나 요소를 문서에 넣을 수만 있습니까? Element에는 getElementsByTagName 메소드가 있기 때문에 어쨌든 필요하지 않습니다.

+0

만약 내가 그것을 캐스팅하지 않으면 오류로 밑줄을 긋습니다. . –

+0

@Nicklas :하지만 실제 컴파일러는 뭐라고 말합니까 ...? –

+0

@Matti Virkkunen getElementsByTagName (String) 메서드는 Element 요소에 대해 정의되지 않았습니다. –

0

문자열 시작 부분에 xml 선언을 추가해보십시오.