2014-02-22 65 views
0

我解析它像標籤之間有數據的XML經過「S |nºconta|」 .I'm保存此如下沒有得到預期的字符串的NSXMLParser解析

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

哪裏foundTextNSMutableString 。但是我沒有把完整的數據作爲「S |nºconta|」相反,我只是「nºconta|」其中「S |」字符被刪除。

凡在XML <Details>S |nºconta|</Details>

+0

[未從xml解析中獲取正確的字符串](http:// stackoverflow。 com/questions/21950788/not-getting-proper-string-from-xml-parsing) – CRD

回答

0

在猜測你在XML非法字符 - 常規ASCII範圍(0-127)以外的任何東西應該使用& #XX進行轉義;或一個等效的命名實體。

+0

對不起,我不明白...我該怎麼辦? – user3162102

+0

你應該確認你的文檔真的是UTF-8編碼,而不僅僅是聲稱。 –

+0

你知道嗎,找到的字符:可能會被多次調用一個元素不是嗎? Apple並不保證只給你一小段文字。 解析器對象可能會向委託人發送幾個解析器:foundCharacters:消息以報告元素的字符。由於字符串可能只是當前元素的總字符內容的一部分,因此您應該將其附加到當前字符累積,直到元素更改。 –

0

據我所見,它工作得很好。

@implementation XMLDELEGATE 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"didStartElement(%@)",elementName); 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    NSLog(@"didEndElement(%@)",elementName); 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSLog(@"foundCharacters(%@)",string); 
} 

@end 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    static const unsigned char bytes[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Details>S |nºconta|</Details>"; 
    NSXMLParser *p; 
    NSData *d = [NSData dataWithBytes:bytes length:sizeof(bytes)-1]; 

    p = [[NSXMLParser alloc] initWithData:d]; 
    NSLog(@"data=%@",d); 
    p.delegate = [XMLDELEGATE new]; 
    [p parse]; 
} 

@end 

輸出這樣的:

2014-03-01 15:35:07.272 xmlp2[35923:303] data=<3c3f786d 6c207665 7273696f 6e3d2231 2e302220 656e636f 64696e67 3d225554 462d3822 3f3e3c44 65746169 6c733e53 207c6ec2 ba636f6e 74617c3c 2f446574 61696c73 3e> 
2014-03-01 15:35:07.273 xmlp2[35923:303] didStartElement(Details) 
2014-03-01 15:35:07.273 xmlp2[35923:303] foundCharacters(S |n) 
2014-03-01 15:35:07.273 xmlp2[35923:303] foundCharacters(ºconta|) 
2014-03-01 15:35:07.273 xmlp2[35923:303] didEndElement(Details) 

正如我在對方的回答說,你可能不重視的多次調用foundCharacters。作爲代表,您有責任將多個字符串數據塊粘貼在每個元素中(如果發生這種情況,則爲!CDATA)