Iphone 如何从解析结果中删除不需要的数据

Iphone 如何从解析结果中删除不需要的数据,iphone,ios,Iphone,Ios,iam正在开发一个应用程序。在该应用程序中,iam使用xml解析。该xml文件包含4个类别标记和其他标记。从xml文件中,我想获取类别标记的数据。在获取类别数据时,每次我打印类别值数组时,都会正确显示。但解析完成后,另一个标记数据将附加到最后一个类别名称。我的解析代码如下所示 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(self.presentvalue) { [presentv

iam正在开发一个应用程序。在该应用程序中,iam使用xml解析。该xml文件包含4个类别标记和其他标记。从xml文件中,我想获取类别标记的数据。在获取类别数据时,每次我打印类别值数组时,都会正确显示。但解析完成后,另一个标记数据将附加到最后一个类别名称。我的解析代码如下所示

- (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);
}