【问题标题】:iPhone how to get CDATA attribute using NSXMLParser?iPhone 如何使用 NSXMLParser 获取 CDATA 属性?
【发布时间】:2011-05-27 13:33:20
【问题描述】:

我想从在线 XML 中解析,其中 XML 如下所示:

<menu maincategory="![CDATA[Erhverv]]" subcategory="![CDATA[Erhvervsregister]]" category="![CDATA[Akupunktur]]"/>

在函数解析器 didStartElement 中我使用如下:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqualToString:@"menu"]) {
        NSString *maincategory = [attributeDict objectForKey:@"maincategory"];
    }
}

使用 %@ 的输出如下所示:

attributeDict:{
    category = "![CDATA[Advokater]]";
    maincategory = "![CDATA[Erhverv]]";
    subcategory = "![CDATA[Erhvervsregister]]";
}


2011-05-27 19:20:42.663 XML[62494:840b] maincategory using %s: `ãâå
2011-05-27 19:20:42.663 XML[62494:840b] maincategory using %@: ![CDATA[Erhverv]]

但我需要没有 ![CDATA] 标签的输出

谁能帮我解决这个问题? 提前致谢

【问题讨论】:

  • 感谢您的建议,但这是对节点价值的建议,我需要节点![CDATA] 字符串中的属性
  • 虽然不是直接的解决方案;简单地将“![CDATA [”和“]]”从这些字符串中删除是非常容易的。
  • 不用喊了。你试过 NSString *maincategory = [[attributeDict objectForKey:@"maincategory"] stringByReplacingOccurrencesOfString:@"![CDATA[" withString:@""];您还需要替换尾随的“]”。
  • 嗨 Rayfleck,这行得通,但问题是它使用 %@ 在日志中正确打印,但不使用 %s。使用 %s 显示 `õâ»

标签: ios objective-c iphone cocoa cocoa-touch


【解决方案1】:

我将使用NSRegularExpression 对象对attributeDict 进行后期处理。对于字典中的每个字符串,将其复制到 NSMutableString(在下面的代码中命名为 theString)并运行以下代码:

NSError *theError = nil;
NSRegularExpression *theExpression = [NSRegularExpression regularExpressionWithPattern:@"!\\[CDATA\\[(.*)\\]\\]" options:(NSRegularExpressionOptions)nil error:&theError];
NSUInteger count = [theExpression replaceMatchesInString:theString options:(NSRegularExpressionOptions)nil range:NSMakeRange(0, [theString length]) withTemplate:@"$1"];

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 2010-11-08
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2011-07-09
    相关资源
    最近更新 更多