我在我的iOS應用程序中使用GDataXML和想要一個簡單的方法來格式化和打印XML字符串 - 「漂亮打印」iOS版 - XML漂亮的打印
有誰知道在目標C的算法,或者一個用我可以翻譯的另一種語言工作?
我在我的iOS應用程序中使用GDataXML和想要一個簡單的方法來格式化和打印XML字符串 - 「漂亮打印」iOS版 - XML漂亮的打印
有誰知道在目標C的算法,或者一個用我可以翻譯的另一種語言工作?
我已經使用HTML Tidy(http://tidy.sourceforge.net/)這樣的東西。它是一個C庫,所以只要您對C熟悉,就可以很容易地連接到Objective C運行庫並從中調用.C++ API可以從Objective C++調用,因此如果您對Objective C++。
我還沒有使用C或C++綁定;我通過Ruby或Python做了它,但它都是相同的庫。它將直接讀取XML(以及潛在的髒HTML),並且它具有簡單和漂亮的打印選項。
您可以direcly修改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