2013-03-02 2 views
6
<root> 
    <table name="radios"> 
     <column name="nameradio">Radio1</column> 
     <column name="logo">http://app.syndicationradio.fr/demo/logo1.png</column> 
     <column name="stream">http://cloud2.syndicationradio.fr:8020</column> 
     <column name="twitter">http://www.twitter.com/#syndicationradio</column> 
     <column name="facebook">http://www.facebook.com/syndicationradio</column> 
     <column name="titre">http://app.syndicationradio.fr/demo/title.xml</column> 
    </table> 
    <table name="radios"> 
     <column name="nameradio">Radio2</column> 
     <column name="logo">http://app.syndicationradio.fr/demo/logo1.png</column> 
     <column name="stream">http://cloud2.syndicationradio.fr:8020</column> 
     <column name="twitter">http://www.twitter.com/#syndicationradio</column> 
     <column name="facebook">http://www.facebook.com/syndicationradio</column> 
     <column name="titre">http://app.syndicationradio.fr/demo/title.xml</column> 
    </table> 
</root> 

अब कृपया वहाँ किसी को भी कि पता लगाने के लिए मदद, मैं कैसे आईओएस में NSXMLParser या किसी अन्य XML पार्सर लगता TBXML का उपयोग कर XML डेटा से उन यूआरएल प्राप्त कर सकते है?आईओएस में NSXMLParser का उपयोग करके मैं इस XML को कैसे पार्स कर सकता हूं?

संपादित करें: आप भी मुझे इस एक्सएमएल के लिए libxml पार्सर का उदाहरण दे सकते हैं।

अग्रिम धन्यवाद।

अपने ज फ़ाइल घोषणा में:

उत्तर

18

यह एक

- (void)viewDidLoad 

    { 
     NSURL *url = [[NSURL alloc]initWithString:@"yourURL"]; 
     NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url]; 
     [parser setDelegate:self]; 
     BOOL result = [parser parse]; 
    } 

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
    { 
     NSLog(@\"Did start element\"); 
    if ([elementName isEqualToString:@"root"]) 
    { 
     NSLog(@"found rootElement"); 
     return; 
    } 
    } 

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    { 
     NSLog(@"Did end element"); 
     if ([elementName isEqualToString:@"root"]) 
      { 
       NSLog(@"rootelement end"); 
      } 

    } 
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    { 
     NSString *tagName = @"column"; 

     if([tagName isEqualToString:@"column"]) 
     { 
      NSLog(@"Value %@",string); 
     } 

    } 
+0

मैं एक स्ट्रिंग है, नहीं एक यूआरएल: NSString * urlString = [NSString stringWithFormat: @ "http://www.somewebsite.com/RunPHPtoOutputXML.php?id=%d", ii]; // ii एक पूर्णांक है, फिर मैं निम्नलिखित चलाता हूं और एक्सएमएल प्राप्त कर रहा हूं: NSURLRequest * urlRequest = [NSURLRequest requestWithURL: [NSURL URLWithString: urlString]]; एनएसडीएटा * डेटा = [NSURLConnection sendSynchronousRequest: urlRequest रिटर्निंग प्रतिक्रिया: प्रतिक्रिया त्रुटि: और त्रुटि]; – user3741598

+0

@ user3741598 वास्तव में आप क्या पूछना चाहते हैं? –

+0

मुझे काटा गया - बहुत सारे पात्र - एक नया प्रश्न खुलेंगे। हालांकि मैं अभी काम पर एक संभावित त्वरित, गंदे संभावित उत्तर के साथ आया था कि मैं घर आने पर कोशिश करूंगा। पूछने के लिए धन्यवाद। – user3741598

2

यह NSXMLParser आप कैसे उपयोग कर सकते हैं

NSMutableData  *webPortFolio; 
NSMutableString  *soapResultsPortFolio; 
NSURLConnection  *conn; 

//---xml parsing--- 

NSXMLParser   *xmlParserPortFolio; 
BOOL    elementFoundPortFolio; 
NSMutableURLRequest *req; 

NSString   *theXMLPortFolio; 
NSString   *strSoapMsg; 
UIAlertView   *alertView; 

अपने .m फ़ाइल में निम्न कोड का उपयोग करें:

-(void)callURL 
{ 

    //Your logic to call URL. 

    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; 
    if (conn) 
    { 
     webPortFolio = [[NSMutableData data] retain]; 
    } 
} 
And to handle the response you can use following functions : 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [webPortFolio setLength:0];  
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [webPortFolio appendData:data]; 
} 

-(void) connection:(NSURLConnection *) connection didFailWithError:(NSError *) error 
{ 

    NSLog(@"error...................%@",[error description]); 
    [webPortFolio release]; 
    [connection release]; 
} 

-(void) connectionDidFinishLoading:(NSURLConnection *) connection 
{ 

    //Check the request and returns the response. 

    NSLog(@"DONE. Received Bytes: %d", [webPortFolio length]); 

    theXMLPortFolio = [[NSString alloc] 
         initWithBytes: [webPortFolio mutableBytes] 
         length:[webPortFolio length] 
         encoding:NSUTF8StringEncoding]; 

    //---shows the XML--- 

    NSLog(@"shows the XML %@",theXMLPortFolio); 
    [theXMLPortFolio release];  

    if(xmlParserPortFolio) 
    { 
     [xmlParserPortFolio release]; 
    } 
    xmlParserPortFolio = [[NSXMLParser alloc] initWithData: webPortFolio]; 
    [xmlParserPortFolio setDelegate: self]; 
    [xmlParserPortFolio setShouldResolveExternalEntities:YES]; 
    [xmlParserPortFolio parse]; 
    [webPortFolio release]; 
    [connection release]; 
} 

//---when the start of an element is found--- 
-(void) parser:(NSXMLParser *) parser 
didStartElement:(NSString *) elementName 
    namespaceURI:(NSString *) namespaceURI 
    qualifiedName:(NSString *) qName 
    attributes:(NSDictionary *) attributeDict 
{ 

    if([elementName isEqualToString:@"your_tag_name"]) 
    { 
     if (!soapResultsPortFolio) 
     { 
      soapResultsPortFolio = [[NSMutableString alloc] init]; 
     } 
     elementFoundPortFolio = TRUE; 
     NSLog(@"Registration...%@",soapResultsPortFolio); 
    } 
    else if([elementName isEqualToString:@"your_tag_name"]) 
    { 
     elementFoundPortFolio = TRUE; 
    } 
    else if([elementName isEqualToString:@"your_tag_name"]) 
    { 
     elementFoundPortFolio = TRUE; 
    } 
    else if([elementName isEqualToString:@"your_tag_name"]) 
    { 
     elementFoundPortFolio = TRUE; 
    } 

} 

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string 
{ 
    if (elementFoundPortFolio) 
    { 
     [soapResultsPortFolio appendString: string]; 
    }  
} 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 
{ 
    NSLog(@"Parser error %@ ",[parseError description]); 
} 


//---when the end of element is found--- 
-(void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"your_tag_name"]) 
    {   
     NSLog(@"display the soap results%@",soapResultsPortFolio); 
    } 
    else if([elementName isEqualToString:@"your_tag_name"]) 
    {   
     //Perform required action 
    } 
    else if([elementName isEqualToString:@"your_tag_name"]) 
    { 
     //Perform required action 
    } 
    else if([elementName isEqualToString:@"your_tag_name"]) 
    { 
     //Perform required action 
    } 

    [soapResultsPortFolio setString:@""]; 
    elementFoundPortFolio = FALSE; 
} 
2

ठीक है के लिए कहा libxml उदाहरण के लिए। मैंने इसे प्रोजेक्ट में इस्तेमाल किया लेकिन के बजाय TBXML के साथ क्योंकि इसने एन्कोडिंग और डेटा पुनर्प्राप्त करने की महत्वपूर्ण समस्याएं पैदा कीं।

सबसे पहले आपको वेब से TBXML.m और TBXML.h फ़ाइलों को डाउनलोड करना होगा और उन्हें अपनी परियोजना में आयात करना होगा। तो फिर तुम भी पुस्तकालय साथ लिंक बाइनरी में अपनी परियोजना के लिए libxml2.dylib से जोड़ने के लिए की है। (अपने XML स्रोत के आधार पर)

एक बार ऐसा हो, तो आप यह करने के लिए अपने डेटा को प्राप्त करना होगा:

NSData *xmlData = [NSData dataWithContentsOfURL:yourURL]; 
TBXML *tbxml = [TBXML newTBXMLWithXMLData:data error:nil]; 
[self getData:tbxml.rootXMLElement]; 

- (void) getData : (TBXMLElement *) element 
{ 
    do { 
     if([[TBXML elementName:element] isEqualToString:@"table"]) 
     { 
      if([[TBXML elementName:element] isEqualToString:@"column"]) 
      { 
       if([[TBXML attributeName:element] isEqualToString:@"nameradio"]) 
       { 
        // You decide what to do here 
       } 
      } 
     } 
     if (element->firstChild) [self getData:element->firstChild]; 
    } while(element = element->nextSibling); 
} 

आप शायद इस कोड को परिवर्तित करना होगा, लेकिन यहाँ आप सभी बुनियादी चीजें आपके पास जरुरत।

+0

thanks.that से you.could तुम मुझे TBXML.h और TBXML.m का लिंक देना इतना अच्छा और साफ कोड है की कोशिश करें। क्योंकि मैंने एक डाउनलोड किया है लेकिन यह मुझे कुछ त्रुटि दिखा रहा है। – Emon

+0

खुशी के साथ;) [यहाँ] (https://github.com/71squared/TBXML/blob/master/TBXML-Headers/TBXML.h) आप हेडर फाइल मिलेगा, और [यहां] (https: // GitHub .com/71squared/TBXML/blob/master/TBXML-Code/TBXML.m) कोड फ़ाइल। यह संस्करण 1.5 है, जिसे मैंने इस्तेमाल किया और मेरे लिए ठीक काम किया। – Rob

+0

खेद कहने के लिए लेकिन यहाँ एक और समस्या है 'है अगर ([[TBXML AttributeName: तत्व] isEqualToString: @" nameradio "])' कि 'असंगत सूचक प्रकार TBXMLElement * जैसे कुछ वारिंग कुछ दिखा' – Emon

संबंधित मुद्दे