【问题标题】:iPhone remove <![CDATAiPhone 删除 <![CDATA
【发布时间】:2010-07-29 09:20:16
【问题描述】:

我正在阅读一个 xml,最后只需要删除我的结果中的 CDATA 信息

例如:我得到:

 "<![CDATA[iPhone 4-Rückgaberecht: Deutsche Telekom kulant]]>"

只需要“iPhone 4-Rückgaberecht: Deutsche Telekom kulant”

谢谢 克里斯

修改您的答案: 我没有使用 NSXMLParser(这就是我制作自己的解析器的原因)

找到了一些建议:

- (NSString *)stringByDecodingXMLEntities;
but dont know how to implement. I always get
> YourController may not respond to '-stringByDecodingXMLEntities" <

【问题讨论】:

  • 我对 iPhone 一无所知,但 XML 解析器应该为您删除 CDATA 部分。如果他/她/它没有,为他/她/它感到羞耻。
  • 我强烈推荐使用 NSXMLParser。 XML 比大多数人想象的要复杂得多。滚动您自己的解析器会导致错误和不兼容性。

标签: iphone string cdata


【解决方案1】:

好的,我解决了这个问题:

 NSMutableString* resultString;


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)s {
   resultString = [[NSMutableString alloc] init];
    [resultString appendString:s];
}

- (NSString*)convertEntiesInString:(NSString*)s {
    if(s == nil) {
    NSLog(@"ERROR : Parameter string is nil");
    }
    NSString* xmlStr = [NSString stringWithFormat:@"<d>%@</d>", s];
    NSData *data = [xmlStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    NSXMLParser* xmlParse = [[NSXMLParser alloc] initWithData:data];
    [xmlParse setDelegate:self];
    [xmlParse parse];
    NSString* returnStr = [[NSString alloc] initWithFormat:@"%@",resultString];
  return returnStr;
}

调用:myConvertedString = [self convertEntiesInString:myOriginalString];

【讨论】:

    【解决方案2】:

    使用

    • (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock

    方法代替

    • (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

    就是这样

    【讨论】:

      【解决方案3】:

      你可以试试正则表达式

      &lt;!\[CDATA\[(.*)\]\]&gt; 替换为$1

      【讨论】:

      【解决方案4】:

      如果您已经有字符串格式的字符串,您可以像这样删除它:

      //Declare what you wish to remove
      NSString * suffixTorRemove = @"<![CDATA[";
      NSString * prefixToRemove = @"]]>";
      
      //Now create a new string which uses your existing string and removes the declared occurrences above
      NSString * newString = [yourString stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
      //Now the first part has changed, time to remove the second part
      NSString * newString2 = [newString stringByReplacingOccurrencesOfString:prefixTorRemove withString:@""];
      

      快速简单:-)

      【讨论】:

        猜你喜欢
        • 2014-10-05
        • 1970-01-01
        • 2013-07-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        • 2012-01-07
        • 1970-01-01
        相关资源
        最近更新 更多