我在iOS应用程序中使用GDataXML,想要一种简单的方法来格式化和打印XML字符串 - “漂亮的打印”
有没有人知道Objective C中的算法,或者我能翻译的另一种语言?
答案 0 :(得分:13)
您可以直接修改GDataXMLNode的源代码:
- (NSString *)XMLString {
...
// enable formatting (pretty print / beautifier)
int format = 1; // changed from 0 to 1
...
}
替代:
由于我不想直接修改库(出于维护原因),我编写了该类以从外部扩展该类:
GDataXMLNode + PrettyFormatter.h:
#import "GDataXMLNode.h"
@interface GDataXMLNode (PrettyFormatter)
- (NSString *)XMLStringFormatted;
@end
GDataXMLNode + PrettyFormatter.m:
#import "GDataXMLNode+PrettyFormatter.h"
@implementation GDataXMLNode (PrettyFormatter)
- (NSString *)XMLStringFormatted {
NSString *str = nil;
if (xmlNode_ != NULL) {
xmlBufferPtr buff = xmlBufferCreate();
if (buff) {
xmlDocPtr doc = NULL;
int level = 0;
// enable formatting (pretty print / beautifier)
int format = 1;
int result = xmlNodeDump(buff, doc, xmlNode_, level, format);
if (result > -1) {
str = [[[NSString alloc] initWithBytes:(xmlBufferContent(buff))
length:(xmlBufferLength(buff))
encoding:NSUTF8StringEncoding] autorelease];
}
xmlBufferFree(buff);
}
}
// remove leading and trailing whitespace
NSCharacterSet *ws = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [str stringByTrimmingCharactersInSet:ws];
return trimmed;
}
@end
答案 1 :(得分:1)
我使用HTML Tidy(http://tidy.sourceforge.net/)来做这样的事情。它是一个C库,因此只要您对C语言感到满意就可以很容易地链接到Objective C运行时和从Objective C运行时调用.C ++ API可以从Objective C ++调用,因此如果您对它感到满意可能更容易使用Objective C ++。
我没有使用C或C ++绑定;我是通过Ruby或Python完成的,但它们都是相同的lib。它将读取直接XML(以及可能脏的HTML),并且它具有简单和漂亮的打印选项。