iOS - XML美化打印

7

我在我的iOS应用程序中使用GDataXML,并希望有一种简单的方式来格式化和打印XML字符串 - "pretty print"

有没有人知道Objective C中的算法,或者可以翻译成其他语言的算法?

2个回答

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

我曾经使用过HTML Tidy(http://tidy.sourceforge.net/)来处理类似的事情。它是一个C库,因此只要您熟悉C语言,就可以将其链接到Objective C运行时中并从中调用。如果您熟悉Objective C ++,则可以从Objective C ++调用C ++ API,这可能更容易使用。

我没有使用C或C ++绑定;我通过Ruby或Python完成了它,但它都是同一个库。它可以读取直接的XML(以及潜在的脏HTML),并且具有简单和漂亮的打印选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接