7

iOSアプリケーションでGDataXMLを使用していて、XML文字列をフォーマットして印刷する簡単な方法が必要です-「かなり印刷」

Objective Cのアルゴリズム、または私が翻訳できる別の言語で機能するアルゴリズムを知っている人はいますか?

4

2 に答える 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
于 2011-12-20T20:01:20.610 に答える
1

私はこのようなことのためにHTMLTidy(http://tidy.sourceforge.net/)を使用しました。これはCライブラリであるため、Cに慣れている限り、ObjectiveCランタイムにリンクして呼び出すことができます。C++APIはObjectiveC ++から呼び出すことができるため、慣れている場合は使いやすくなります。 ObjectiveC++。

私はCまたはC++バインディングを使用していません。私はRubyまたはPythonを介してそれを行いましたが、それはすべて同じライブラリです。ストレートXML(および潜在的にダーティなHTML)を読み取り、シンプルできれいな印刷オプションの両方を備えています。

于 2011-06-19T15:17:20.243 に答える