【问题标题】:Parsing XML file using NSXMLParser使用 NSXMLParser 解析 XML 文件
【发布时间】:2009-07-03 09:52:36
【问题描述】:

我必须使用 NSXMLParser 解析 XML 文件。其中有很多 HTML 标签,所以当我尝试解析它时,它会将字符串存储到那个位置,然后再次转到找到的字符方法并开始附加它。 我的代码是:

if (Bio_CResults) {
    [BioResults appendString: string];
    [Info appendString:string];

    [stringarr addobject:Info];
    NSLog(@"bio==%@",BioResults);
    NSLog(@"string==%@",string);
}

我想将它添加到字符串数组中,但在这里它会创建额外的数组对象。即

stringarr objectAtIndex 0 = abc
stringarr objectAtIndex 1 = def
stringarr objectAtIndex 2 = ghi

但实际上我希望将它们全部放在一个对象中,因为它们实际上只是一个字符串.. 请帮我解决这个问题

【问题讨论】:

    标签: objective-c xml cocoa string parsing


    【解决方案1】:

    如果您甚至不需要多个字符串对象,您可以使用NSMutableString 而不是数组。只需使用appendString: 方法添加到字符串的末尾即可:

    NSMutableString *string = [NSMutableString string];
    [string appendString:@"abc"];
    [string appendString:@"def"];
    NSLog(@"New string is %@", string);
    

    这将记录“新字符串是 abcdef”。


    如果你真的想要一个数组,请使用 NSMutableArray 而不是 NSArray。这样,您可以就地更改对象(将字符串替换为通过附加另一个字符串创建的新字符串)。比如:

    // First create an array with @"abc"
    NSMutableArray *mArray = [NSMutableArray arrayWithObject:@"abc"];
    
    // Next get the first object as a string and append @"def" to it in-place
    NSString *string = (NSString *)[mArray objectAtIndex:0];
    [mArray replaceObjectAtIndex:0 withObject:[string stringByAppendingString:@"def"]];
    
    // Now get the new first object
    NSLog(@"First object is %@", (NSString *)[mArray objectAtIndex:0]);

    这将记录消息“第一个对象是 abcdef”。

    【讨论】:

    • 我认为他已经在尝试使用可变数组,我猜“addobject:”只是他的问题中的一个错字。而且他还使用“appendString:”,所以我完全不确定他想用可变数组完成什么。 :-)
    • 也许问题是他正在添加对象而不是调用 replaceObjectAtIndex:withObject:?我认为他调用 appendString: on 的那两个可变字符串是他用来存储来自 XML 解析器(来自 parser:foundCharacters: 方法)的数据的字符串,他只是将它们添加到数组中,而不是替换它们的旧对应项。无论哪种方式,答案都是:)
    【解决方案2】:

    我真的不喜欢 NSXmlParser。您可能想阅读我关于使用 RegxKitLite 的博客文章 http://blog.bluespark.co.nz/?p=51

    这可能会有所帮助。希望它不会把你引向错误的方向。

    干杯,约翰。

    【讨论】:

      【解决方案3】:

      里面有很多HTML标签……

      请注意,HTML 通常不是有效的 XML。如果您正在解析 HTML,XML 解析器会在文档的某些部分抛出错误。

      您最好创建一个 WebView,将 HTML 内容加载到其中,然后从视图的主框架中获取一个 DOMDocument 并遍历 DOM 层次结构。您不必将视图放入窗口中;您可以使用它来获取 DOMDocument。

      如果您正在解析 XML 并表示“XML 标签”,则可以忽略此答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2012-02-13
        • 2012-09-02
        • 2016-02-10
        • 2012-10-19
        • 1970-01-01
        相关资源
        最近更新 更多