Разбор Android Android, проверить идентификатор и прочитать соответствующее значение - PullRequest
0 голосов
/ 23 марта 2012

У меня есть XML-файл, в котором хранятся идентификаторы, имена и URL-адреса

Мне нужно прочитать файл и проверить значение идентификатора. Если он равен soe параметру, я прочитаю имя и URL и перестану проверять. В противном случае я перехожу к следующему элементу и делаю ту же проверку.

У меня есть следующий код для iPhone. Это похоже на то, что мне нужно сделать, но мне нужно сделать это на Android:

NSString *url = @"my http url to get xml file";    
NSURL *xmlURL = [NSURL URLWithString:url];
XMLParser *parser = [[XMLParser alloc] initXMLParser];

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
      namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName     
{
    if([elementName isEqualToString:@"person"])
    {
        Pickers.person= person; 
        Pickers.fullName   = fullName;
        Pickers.ID = ID;
        Pickers.URl = URl;
        return;
    }

    //There is nothing to do if we encounter the Books element here.
    // and release the object.

    NSString *P_ID ;
    NSString *P_URl;

    if([elementName isEqualToString:@"ID"]) 
    {
        P_ID = currentElementValue;
        NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"\n"];

        P_ID = [[P_ID componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];

        P_ID =  [P_ID stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

        [ID addObject:P_ID];
    }    
    else if([elementName isEqualToString:@"Name"]) 
    {

        [fullName addObject:currentElementValue];
    }
    else  if([elementName isEqualToString:@"Symbol"]) 
    { 
        [person addObject:currentElementValue];
    }
}

else if([elementName isEqualToString:@"URl"]) 
{
    P_URl = currentElementValue;
    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"\n"];

    P_URl = [[P_URl componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];

    P_URl =  [P_URl stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

    [URl addObject:P_URl];
}


}

Также я хочу знать, что лучше использовать в моем случае: SAX-парсер, DOM-парсер или XMLPullParser?

Ответы [ 3 ]

0 голосов
/ 04 апреля 2012

Вот пример XML-парсера, который может оказаться полезным:

public class XmlParserDemo {

private List<String> titles = new ArrayList<String>();      
public List<String> getTitles() {   //getter    
    return titles;      
}

public void processTag(XmlPullParser xParser, String tagName) throws IOException,
XmlPullParserException {
    if ("TAG".equals(tagName)) {    //xml Tag
        titles.add(xParser.nextText());
    }       
}

public static void main (String args[]) throws XmlPullParserException, IOException{     
    XmlParserDemo xp = new XmlParserDemo(); // create OBJ       
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();             
    URL url = new URL("your http URL");
    InputStreamReader reader = new InputStreamReader(url.openStream());
    xpp.setInput(reader);                   
    int eventType = xpp.getEventType();                                         
    while(eventType != XmlPullParser.END_DOCUMENT){              
        if(eventType == XmlPullParser.START_TAG){
            xp.processTag(xpp, xpp.getName()); 
        }                        
        eventType = xpp.next();
    }           
    List<String> xmlValues = xp.getTitles();    //passing getter values
    StringBuffer sb = new StringBuffer();
    for(String values:xmlValues){
     sb.append("\t");
     sb.append(values);
     sb.append("\n");
    }
    System.out.println("\n" + sb.toString());  //Print Values                                                  
 }  

}
0 голосов
/ 19 июля 2012

после долгих исследований и проб и ошибок я считаю, что наиболее эффективным и простым (меньше кода, меньше ошибок) является использование Simple framework; это удивительно, как легко и весело использовать!

вы можете найти его здесь

0 голосов
/ 23 марта 2012

это должно помочь вам начать.

URL url = new URL("your http url");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
InputStream in = conn.getInputStream();
Reader reader = new InputStreamReader(new BufferedInputStream(in));
pullParser.setInput(reader);
int event;
String tag;
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
    if ( XmlPullParser.START_TAG == event ) {
        tag = parser.getName();
        if (tag.equals("ID")) {
        //your logic here
        }           
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...