2012-04-18 7 views
9

मैं एक यूआरएल से एक xml पार्स करने के लिए NSXMLParser का उपयोग कर रहा विशेष वर्ण (लहजे) पार्स नहीं कर सकताNSXMLParser

तत्वों में से कुछ "की तरह विशेष वर्ण (मेरे कोड लगभग ठीक here के समान है) "जो एक शब्द पसंद करता है ndndre दो (á और ndre) में विभाजित करने के लिए।

यहाँ मेरी loadXMLByURL

-(id) loadXMLByURL:(NSString *)urlString{ 
tickets  = [[NSMutableArray alloc] init]; 
NSURL *url  = [NSURL URLWithString:urlString]; 
NSData *data = [[NSData alloc] initWithContentsOfURL:url]; 
parser   = [[NSXMLParser alloc] initWithData:data]; 
parser.delegate = self; 
[parser parse]; 
return self;} 

मैं बहुत यकीन है कि यह है, क्योंकि एन्कोडिंग सेट नहीं है कर रहा हूँ है, लेकिन मुझे यकीन है कि जहां/कैसे लागू करने के लिए नहीं कर रहा हूँ (मैं इसे NSUTF8StringEncoding होने की जरूरत है लगता है)।

[अद्यतन] मेरे कोड का रेस्ट ...

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{  
    if ([elementname isEqualToString:@"ticket"]) 
    { 
     currentTicket = [Ticket alloc]; 
    } 

} 

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementname isEqualToString:@"name"]) 
    { 
     currentTicket.name = currentNodeContent; 
    } 
    else if ([elementname isEqualToString:@"title"]) 
    { 
     currentTicket.title = currentNodeContent; 
    } 
    else if ([elementname isEqualToString:@"status"]) 
    { 
     currentTicket.status = currentNodeContent; 
    } 
    else if ([elementname isEqualToString:@"ticket"]) 
    { 
     [tickets addObject:currentTicket]; 
     [currentTicket release]; 
     currentTicket = nil; 
     [currentNodeContent release]; 
     currentNodeContent = nil; 
    } 

} 

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

[अद्यतन 2] नमूना xml ...

<RB> 
    <list> 
     <ticket> 
      <name>Andrew Ford</name> 
      <title>3rd release</title> 
      <status>1</status> 
     </ticket> 

     <ticket> 
      <name>David Jenkins</name> 
      <title>3rd release</title> 
      <status>0</status> 
     </ticket> 

     <ticket> 
      <name>Luis gomez ándre</name> 
      <title>3rd release</title> 
      <status>1</status> 
     </ticket> 
    </list> 
</RB> 
+0

मैं ओबीजे-सी के लिए नया ब्रांड हूं, लेकिन मुझे लगता है कि आप डेटा को एनएसएसटींग में परिवर्तित कर सकते हैं, यूटीएफ 8 के रूप में एन्कोड करें [जैसा कि यहां दिखाया गया है) (http://stackoverflow.com/questions/2467844/ कन्वर्ट-यूटीएफ -8-एन्कोडेड-एनएसडीएटी-टू-एनएसस्ट्रिंग) और एनएसएक्सएमएल पार्सर को पास करें? – inkedmn

+0

मैं NSXMLParser का बहुत उपयोग करता हूं और उस समस्या को नहीं मिला है। क्या आप उस कोड का हिस्सा पोस्ट कर सकते हैं जो XML टेक्स्ट को संसाधित करता है? –

+0

मेरा बाकी कोड पोस्ट किया गया। मुझे आश्चर्य है कि क्या मुद्दा अब खरीदार में पाया गया है? –

उत्तर

5

मैं एक NSString के लिए url लोड और फिर परिवर्तित इस तरह।

-(id) loadXMLByURL:(NSString *)urlString{ 

    tickets  = [[NSMutableArray alloc] init]; 
    NSURL *url  = [NSURL URLWithString:urlString]; 
    NSError *error; 
    NSString * dataString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 
    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; 
    parser   = [[NSXMLParser alloc] initWithData:data]; 
    parser.delegate = self; 
    [parser parse]; 
    return self; 

} 

संपादित करें: समस्या का भाग हो सकता है कि आपके parser:foundCharacters: विधि के बजाय अपनी currentNodeContent को बताए है जोड़कर। निम्नलिखित लिंक पर ऐप्पल डॉक्टर देखें।

http://developer.apple.com/library/ios/#documentation/cocoa/reference/NSXMLParserDelegate_Protocol/Reference/Reference.html

डॉक से:

क्योंकि स्ट्रिंग वर्तमान तत्व के लिए कुल चरित्र सामग्री का ही हिस्सा हो सकता है, आप इसे तत्व परिवर्तन जब तक पात्रों में से वर्तमान संचय को संलग्न करना चाहिए।

+1

धन्यवाद। इसने मेरी समस्या को हल नहीं किया (भले ही मैंने सोचा कि यह होगा)! एनएसएलओजी (@ "% @", डेटास्ट्रिंग) करना; दिखाता है कि स्ट्रिंग में वास्तव में उच्चारण के साथ अक्षर शामिल हैं जो कि बहुत अच्छा है।हालांकि आन्द्रे जैसे एक शब्द अभी भी तोड़ रहा है। इससे मुझे लगता है कि यह मुद्दा foundcharacters() में है। मेरा अद्यतन प्रश्न देखें। –

+0

क्या आपके द्वारा उल्लिखित लॉग में काम किया गया है या केवल पार्सर के विचार के बाद? –

+0

लॉग में स्ट्रिंग्स सही तरीके से प्रदर्शित होते हैं। ऑब्जेक्ट को टिकट सरणी में जोड़ते समय, एक विशेष चरित्र वाला नाम दो अलग-अलग ऑब्जेक्ट्स के रूप में पंजीकृत किया जाएगा। –

1

उपयोग

NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; 

और इसे से स्ट्रिंग प्राप्त करने के लिए, ऐसा करते हैं:

NSString *theXML = [[NSString alloc] initWithBytes:[data mutableBytes] 
                length:[data length] 
               encoding:NSUTF8StringEncoding]; 

तो फिर आप अपने NSXMLParserDelegate तरीकों में xml पार्स कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

4

समस्या मिली! यह वास्तव में पाए गए पात्रों में है। आप इस के लिए अपने कोड बदलना चाहिए:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSLog(@"found characters: %@", string); 
    if (!currentNodeContent) { 
     currentNodeContent = [[NSMutableString alloc] init]; 
    } 
    [currentNodeContent appendString:string]; 
} 

मैंने पहले एक ही समस्या हो रही थी, और इसके बाद के संस्करण कोड यह तय किया है।

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