1

我在解析 XML 内容并将其显示在 ui 中时遇到问题。XML 有一个元素的内容是这样的

<fullDescription>3.2GHz PowerPC CPU  ATI GPU  512 MB 700 MHz GDDR3 RAM  1x Wireless Game Controller  3x USB 2.0 port  XBOX Live ready  20GB HDD  HD-AV-Kabel für High-Definition Output (720p, 1080i)  inkl.</fullDescription>

但是,在我解析它(通过 TBXML)之后,我得到的字符串为

3.2GHz PowerPC CPU  ATI GPU  512 MB 700 MHz GDDR3 RAM  1x Wireless Game Controller  3x USB 2.0 port  XBOX Live ready  20GB HDD  HD-AV-Kabel für High-Definition Output (720p, 1080i)  inkl.

我已经尝试了一些已经提到的解决方案来清理特殊字符,例如 在 Objective-C / Cocoa Touch 中的 HTML 字符解码, 甚至修改了包含 "Â" 的方法,双空格似乎没有任何工作..

我无法将 Github NSString 类别用于 HTML,因为该代码似乎与 ARC 不兼容,并且当我尝试在我的项目中使用它时遇到各种错误。

有人可以在正确的方向上帮助我..把我的头发拉出来一段时间:-(..我认为必须有一种简单的方法以通用的方式做到这一点。

4

2 回答 2

0

Just check that encoding of your xml file same as it indicated in your xml header.

于 2013-11-24T17:36:52.143 回答
0

你试过这个吗?

//  NSString_stripHtml.h
//  Copyright 2011 Leigh McCulloch. Released under the MIT license.

#import <Foundation/Foundation.h>

@interface NSString (stripHtml)
- (NSString*)stripHtml;
@end

//  NSString_stripHtml.m
//  Copyright 2011 Leigh McCulloch. Released under the MIT license.

#import "NSString_stripHtml.h"

@interface NSString_stripHtml_XMLParsee : NSObject<NSXMLParserDelegate> {
@private
    NSMutableArray* strings;
}
- (NSString*)getCharsFound;
@end

@implementation NSString_stripHtml_XMLParsee
- (id)init {
    if((self = [super init])) {
        strings = [[NSMutableArray alloc] init];
    }
    return self;
}

- (void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string {
    [strings addObject:string];
}
- (NSString*)getCharsFound {
    return [strings componentsJoinedByString:@""];
}
@end

@implementation NSString (stripHtml)
- (NSString*)stripHtml {
    // take this string obj and wrap it in a root element to ensure only a single root element exists
    NSString* string = [NSString stringWithFormat:@"<root>%@</root>", self];

    // add the string to the xml parser
    NSStringEncoding encoding = string.fastestEncoding;
    NSData* data = [string dataUsingEncoding:encoding];
    NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data];

    // parse the content keeping track of any chars found outside tags (this will be the stripped content)
    NSString_stripHtml_XMLParsee* parsee = [[NSString_stripHtml_XMLParsee alloc] init];
    parser.delegate = parsee;
    [parser parse];

    // log any errors encountered while parsing
    //NSError * error = nil;
    //if((error = [parser parserError])) {
    //    NSLog(@"This is a warning only. There was an error parsing the string to strip HTML. This error may be because the string did not contain valid XML, however the result will likely have been decoded correctly anyway.: %@", error);
    //}

    // any chars found while parsing are the stripped content
    NSString* strippedString = [parsee getCharsFound];

    // get the raw text out of the parsee after parsing, and return it
    return strippedString;
}
@end
于 2013-11-27T09:46:34.550 回答