NSXMLParser,两个相同的元素帮助!

时间:2010-12-28 21:56:16

标签: xml cocoa-touch ios4 nsxmlparser

我正在尝试为学校项目解析此XML文件:http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/genre=20/xml

我的问题是我正在尝试获取此处的相册名称:<im:collection><im:name>。但是有两个名为<im:name>的元素。第一个位于<entry>,第二个位于<im:collection>

如何从第二个<im:name>获取信息?

2 个答案:

答案 0 :(得分:4)

您将使用XML一直遇到问题,因为标签可能会在多个父级中多次出现。我跟踪这个的方法是跟踪父标记。因此,在子类NSXMLParser中,我维护了两个属性:

NSString *currentTag;
NSString *parentTag;

parser:didStartElement:namespaceURI:qualifiedName:attributes:我填充它们:

parentTag = currentTag;
currentTag = elementName;

parser:foundCharacters:中,我根据我目前所处的父标记填充我的数据模型...

if ([currentTag isEqualToString:@"im:name"]) {
    if ([parentTag isEqualToString:@"entry"]) {
        // do something
    } else if ([parentTag isEqualToString:@"im:collection"]) {
        // do something else
    }
}

加盐调味。

答案 1 :(得分:0)

在任何使用pull解析器(处理标记事件而不是浏览DOM)的XML解析中,如果需要特定于a的元素,则必须在某处设置某种变量来跟踪文档中的位置。与其他子树中的元素同名的XML子树。

在您的情况下,因为您知道您希望在集合下使用名称,您还需要查找集合标记并跟踪您何时输入并离开它 - 所以当您到达名称标记时,您只需处理它你也在内部收藏。