0

我正在开发一个应用程序。在那使用 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>

从这个xml我得到了像1,2,3这样的数组值http://www.youtube.com/watch?v=J_I8Y-i4Axc。像这样我得到了结果。所以请告诉我如何在没有那个的情况下获取类别值额外的数据。

4

3 回答 3

0

检查您的 xml 解析代码。如果开始/结束元素名称是类别。将对象添加到数组中,否则什么也不做。只是昏倒

于 2012-05-10T07:15:41.417 回答
0
- (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;
}
}

这应该可以帮助您进行解析。希望能帮助到你。快乐编码:)

于 2012-05-10T07:25:14.597 回答
0

我觉得这条线看起来很奇怪

if(![elementName compare:@"category"])

不应该是这样吗?(没有 !)

if([elementName compare:@"category"])

已编辑

尝试将此替换为 didEndElement

if([elementName isEqualToString:@"category"])
{
    [categories addObject:presentvalue];
    presentValue = [NSMutableString string];
    NSLog(@"%@",presentvalue);
    NSLog(@"Number of elements %@",categories);
}
于 2012-05-10T07:41:53.010 回答