2010-11-24 7 views
3

여기서는 XmlPullParser을 사용하여 아래 문서를 구문 분석합니다. 네임 스페이스 때문에 작동하지 않습니다. 어떻게 네임 스페이스를 구문 분석합니까? 여기 XmlPullParser를 사용하여 XML 네임 스페이스 처리

XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
factory.setNamespaceAware(true); 
factory.setValidating(true); 
XmlPullParser xpp = factory.newPullParser(); 

xpp.setInput(in, HTTP.UTF_8); 
String namespace = xpp.getNamespace(); 

boolean inMessage = false; 

int eventType = xpp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
    //START TAGS 
    if(eventType == XmlPullParser.START_TAG) { 
     if(xpp.getName().equals(namespace+"resource")) { 
      httpCode = Integer.valueOf(xpp.getAttributeValue(null, "code").trim()); 
      type = xpp.getAttributeValue(null, "type").trim(); 
     } else if(xpp.getName().equals(namespace+"message")) { 
      inMessage = true; 
     } 
    //TAG TEXT 
    } else if(eventType == XmlPullParser.TEXT) { 
     if(inMessage) { 
      message = xpp.getText().trim(); 
      break; //CANCEL the iteration 
     } 
    } else if(eventType == XmlPullParser.END_TAG) { 
     if(inMessage) { 
      inMessage = false; 
     } 
    } 
    eventType = xpp.next(); 
} 

내가 별도로 resdif을 구문 분석 할

<?xml version="1.0" encoding="UTF-8"?> 
    <res:resource 
     xmlns:res="http://www.example.com/ns/server/resource" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.example.com/ns/server/resource resource.xsd " 
     version="1" > 
    <res:message httpCode="200" type="ok" > 
     <![CDATA[Sample Success Response]]> 
    </res:message> 
    <dif:person 
     xmlns:dif="http://www.example.com/ns/server/resource" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.example.com/ns/server/person person.xsd " 
     version="1" > 
     <dif:name>test name</dif:name> 
     <dif:description lang="en">test description</dif:description> 
    </dif:person > 
</res:resource> 

구문 분석 할 문서의 종류의 예입니다.

답변

7

getPrefix 전화로 구분할 수 있습니다. 일부 테스트 코드 :

prefix=res,name=resource 
prefix=res,name=message 
prefix=dif,name=person 
prefix=dif,name=name 
prefix=dif,name=description 
:

try { 
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(true); 
     XmlPullParser parser = factory.newPullParser();      
     InputStream input = getResources().openRawResource(R.raw.test); 
     parser.setInput(input, HTTP.UTF_8);  
     int eventType = parser.getEventType(); 
     while(eventType != XmlPullParser.END_DOCUMENT){    
      if(eventType == XmlPullParser.START_TAG){ 
       String prefix = parser.getPrefix(); 
       String name = parser.getName(); 
       Log.i("XML", String.format("prefix=%s,name=%s",prefix,name)); 
       if("dif".equals(prefix)){ 
        handleDiff(parser); 
       }else if ("res".equals(prefix)){ 
        handleRes(parser); 
       } 
      } 

      eventType = parser.next(); 
     } 
    } catch (Exception e) { 
     Log.e("XML","",e); 
    } 

로그 캣 아웃 테스트 데이터를 넣어