Objective c 目标c中的字符串替换操作
我得到的结果是Objective c 目标c中的字符串替换操作,objective-c,xml,xcode,xml-parsing,Objective C,Xml,Xcode,Xml Parsing,我得到的结果是 <ZmaterialGroupList><Matkl>001</Matkl><Text>Metal processing</Text></ZmaterialGroupList> 001金属加工 当我应用字符串替换函数时,我需要得到001金属处理的结果,它给出了一个异常。请帮助我 从注释中添加代码: for(int i=0; i<[soapArray.items count]; i++) {
<ZmaterialGroupList><Matkl>001</Matkl><Text>Metal processing</Text></ZmaterialGroupList>
001金属加工
当我应用字符串替换函数时,我需要得到001金属处理的结果,它给出了一个异常。请帮助我
从注释中添加代码:
for(int i=0; i<[soapArray.items count]; i++) {
NSString *str = [soapArray.items objectAtIndex:i];
str = [str stringByReplacingOccurrencesOfString:@"<Matkl>" withString:@""];
}
for(inti=0;i您可能会更好地使用而不是尝试替换XML片段
如果您更新您的问题,使其包含更多解释代码的内容(特别是处理soapArray的代码),我应该能够更多地解释为什么您的代码不能正常工作
使用NSXMLParser
重要的是要记住,NSXMLParser只是按顺序读取您提供给它的数据,而不是使用DOM结构
安装程序
首先,您需要为解析器提供一些要分析的内容!在我的示例中,我从捆绑包中获取了一个资源,并将其转换为NSData。不过,还有另一个选项可以使用initWithContentsOfURL
。请确保不要忘记设置您的委托
-(void) parse
{
NSString *file = @"myXMLFile.xml";
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[file stringByDeletingPathExtension] ofType:[file pathExtension]]];
//If you already have a string:
//NSData* data=[xmlString dataUsingEncoding:NSUTF8StringEncoding];
if (data.length == 0)
{
//No data
return nil;
}
...
}
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
解析
完成
在完成后,最好检查没有出现任何错误并释放解析器内存。因此在parse
方法中,在调用[parser parse]
后添加此项
if ([parser parserError] != nil)
{
[[[[UIAlertView alloc] initWithTitle:@"Error parsing XML" message:[[parser parserError] localizedDescription] delegate:nil cancelButtonTitle:@"Done" otherButtonTitles:nil] autorelease] show];
}
[parser release];
考虑使用XML解析器,或者可以使用NSScanner
:
例如:
NSString *wanted;
NSString *fullMessage;
NSString *xml = @"<ZmaterialGroupList><Matkl>001</Matkl><Text>Metal processing</Text></ZmaterialGroupList>";
NSScanner *scanner = [NSScanner scannerWithString:xml];
[scanner scanUpToString:@"<Matkl>" intoString:nil];
[scanner scanString:@"<Matkl>" intoString:nil];
[scanner scanUpToString:@"</Matkl>" intoString:&wanted];
fullMessage = wanted;
[scanner scanUpToString:@"<Text>" intoString:nil];
[scanner scanString:@"<Text>" intoString:nil];
[scanner scanUpToString:@"</Text>" intoString:&wanted];
fullMessage = [fullMessage stringByAppendingFormat:@" %@", wanted];
NSLog(@"fullMessage: '%@'", fullMessage);
NSString*需要;
NSString*完整消息;
NSString*xml=@“001金属加工”;
NSScanner*scanner=[NSScanner scannerWithString:xml];
[扫描程序扫描字符串:@“intoString:nil];
[扫描仪扫描字符串:@“intoString:nil];
[扫描仪扫描字符串:@“intoString:&需要];
fullMessage=需要;
[扫描程序扫描字符串:@“intoString:nil];
[扫描仪扫描字符串:@“intoString:nil];
[扫描仪扫描字符串:@“intoString:&需要];
fullMessage=[fullMessage stringByAppendingFormat:@“%@”,需要];
NSLog(@“fullMessage:'%@'”,fullMessage);
NSLog输出:
fullMessage:“001金属加工”请发布您已经拥有的代码和更多输入示例(int i=0;iI将注释代码放入问题中,并重新格式化问题,以便正确显示原始xml。您是如何填充soapArray的?其中包含什么内容?在您添加的注释代码中,str的值未保存。错误到底是什么,发生在哪一行。原因是什么(int i=0;i当我尝试以这种方式执行此操作时,由于未捕获的异常“NSInvalidArgumentException”,我在终止应用程序时遇到异常,进入变量str isstr的结果是:“001Metal processing”,但接下来我遇到异常。这是解析字符串的示例,这是最初的问题。如果您尝试使用示例co在循环中执行de您必须调整代码并确保字符串有效,这与解析模式匹配。考虑到循环,这可能不是进行解析的最佳方式。请解释一下如何使用NSXMLParse。我没有任何xml文件,但我得到的结果是xml格式的,然后如何解析。我已经更新了我的答案。看一看在代码的第一部分。
NSString *wanted;
NSString *fullMessage;
NSString *xml = @"<ZmaterialGroupList><Matkl>001</Matkl><Text>Metal processing</Text></ZmaterialGroupList>";
NSScanner *scanner = [NSScanner scannerWithString:xml];
[scanner scanUpToString:@"<Matkl>" intoString:nil];
[scanner scanString:@"<Matkl>" intoString:nil];
[scanner scanUpToString:@"</Matkl>" intoString:&wanted];
fullMessage = wanted;
[scanner scanUpToString:@"<Text>" intoString:nil];
[scanner scanString:@"<Text>" intoString:nil];
[scanner scanUpToString:@"</Text>" intoString:&wanted];
fullMessage = [fullMessage stringByAppendingFormat:@" %@", wanted];
NSLog(@"fullMessage: '%@'", fullMessage);