【问题标题】:iOS - XML Pretty PrintiOS - XML 漂亮的打印
【发布时间】:2011-06-19 14:47:19
【问题描述】:

我在我的 iOS 应用程序中使用 GDataXML,并且想要一种简单的方法来格式化和打印 XML 字符串 - “漂亮打印”

有谁知道 Objective C 中的算法,或者我可以翻译的另一种语言的算法?

【问题讨论】:

    标签: ios objective-c xml gdataxml


    【解决方案1】:

    可以直接修改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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 2011-05-06
        • 2020-04-28
        • 1970-01-01
        • 2012-01-24
        • 2012-03-25
        • 2014-11-09
        相关资源
        最近更新 更多