私はiOSアプリケーションにGDataXMLを使用してXML文字列をフォーマットして印刷するための簡単な方法を望んでいます - 「かわいいプリント」をのiOS - XMLプリティ印刷
誰もが客観Cにおけるアルゴリズム、または1つを知っています私は翻訳できる別の言語で動作しますか?
私はiOSアプリケーションにGDataXMLを使用してXML文字列をフォーマットして印刷するための簡単な方法を望んでいます - 「かわいいプリント」をのiOS - XMLプリティ印刷
誰もが客観Cにおけるアルゴリズム、または1つを知っています私は翻訳できる別の言語で動作しますか?
私はこのようなことにHTML Tidy(http://tidy.sourceforge.net/)を使用しました。これはCライブラリですので、Cに慣れていればかなり簡単にObjective Cランタイムにリンクして呼び出すことができます。C++ APIはObjective C++から呼び出すことができます。 Objective C++。
私はCまたはC++バインディングを使用していません。私はRubyやPythonでやりましたが、すべて同じlibです。それはまっすぐなXML(潜在的に汚れたHTMLと同様に)を読むでしょうし、シンプルでかわいい印刷オプションの両方を持っています。
あなたは直接使う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