Iphone 如何从解析结果中删除不需要的数据
iam正在开发一个应用程序。在该应用程序中,iam使用xml解析。该xml文件包含4个类别标记和其他标记。从xml文件中,我想获取类别标记的数据。在获取类别数据时,每次我打印类别值数组时,都会正确显示。但解析完成后,另一个标记数据将附加到最后一个类别名称。我的解析代码如下所示Iphone 如何从解析结果中删除不需要的数据,iphone,ios,Iphone,Ios,iam正在开发一个应用程序。在该应用程序中,iam使用xml解析。该xml文件包含4个类别标记和其他标记。从xml文件中,我想获取类别标记的数据。在获取类别数据时,每次我打印类别值数组时,都会正确显示。但解析完成后,另一个标记数据将附加到最后一个类别名称。我的解析代码如下所示 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(self.presentvalue) { [presentv
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(self.presentvalue)
{
[presentvalue appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if(![elementName compare:@"category"])
{
[categories addObject:presentvalue];
NSLog(@"%@",presentvalue);
NSLog(@"Number of elements %@",categories);
}
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"category"])
{
presentvalue=[NSMutableString string];
}
}
我的xml文件内容如下
<lesson>
<categories>
<category id="1">1</category>
<category id="2">2</category>
<category id="3">3</category>
</categories>
<references>
<reference id="1" type="youtube" categoryid="2" name="Boyles law">
<url><![CDATA[http://www.youtube.com/watch?v=J_I8Y-i4Axc]]>
</url>
</reference>
</references>
</lesson>
1.
2.
3.
从这个xml中,我得到了数组值,如1,2,3http://www.youtube.com/watch?v=J_I8Y-像这样我得到了结果。所以请告诉我如何在没有额外数据的情况下获得类别值 检查xml解析代码。如果起始/结束元素名称为category,则为。向数组中添加对象,否则不执行任何操作。刚刚过去
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"category"]) {
NSLog(@"Node is found correctly");
if(presentvalue == nil)
presentvalue = [NSMutableString string];
else
[presentvalue setString:@""];
}
else {
presentvalue = nil;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[presentvalue appendString:string];
if (presentvalue)
{
[self.tempArray addObject:presentvalue]; // add this line. create a tempArray containing all the strings.
presentvalue = nil;
}
}
这将有助于你进行语法分析。希望能有帮助。快乐编码:)我觉得这句话看起来很奇怪
if(![elementName compare:@"category"])
难道不是这样吗?(没有!)
编辑
尝试将此替换为DiEndElement
if([elementName isEqualToString:@"category"])
{
[categories addObject:presentvalue];
presentValue = [NSMutableString string];
NSLog(@"%@",presentvalue);
NSLog(@"Number of elements %@",categories);
}
第一件事是将您的found charectr和found cdata代码发布到第二件事是您没有将属性分配到类别中的数组。你熟悉属性吗?第一件事我已经发布了我找到的字符代码。我不需要那个地址,所以我没有写cdata代码。第二件事我不想要那个类别属性值,我只需要类别标记值。没有用。同样的输出会出现。[self.tempArray addObject:presentvalue];//在presentvalue=nil上方添加这一行,并删除该方法中的NSLog。创建一个包含所有字符串的临时数组。打印tempArray以检查结果。是否可以包含这些NSLog语句的输出。您是否希望在数组中仅获取1、2和3?如果([elementName IsequalString:@“category”])使用compare:(比较:)是没有意义的,当然也不应该使用!比较声明应该做什么?没错。无论如何,这个问题不是这样的。我认为您的presentValue仍然指向DiEndElement之后,foundCharacters将被调用,即使它不是category标记。在为最后一个类别分配presentValue后,您没有发布或使用它做任何事情,因此它仍然指向最新的类别。尝试在DiEndElement函数中分配新的presentValue。您必须删除该文件!从我之前说过的“如果”开始。
if([elementName isEqualToString:@"category"])
{
[categories addObject:presentvalue];
presentValue = [NSMutableString string];
NSLog(@"%@",presentvalue);
NSLog(@"Number of elements %@",categories);
}