2011-06-19 80 views
7

我在我的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做了它,但它都是相同的庫。它將直接讀取XML(以及潛在的髒HTML),並且它具有簡單和漂亮的打印選項。

13

您可以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