2011-06-19 17 views
7
Ben biçimlendirmek ve bir XML dizesi yazdırmak için basit bir yol iOS uygulamasında GDataXML kullanarak ve istediğiniz am

- "oldukça print"iOS - XML ​​Pretty Baskı

herkes Objective C bir algoritma biliyor mu, yoksa bir tane o Başka bir dilde çeviri yapabilir miyim?

cevap

1

Bunun gibi şeyler için HTML Tidy (http://tidy.sourceforge.net/) kullanmıştım. C kütüphanesi bu yüzden C ile rahat bir şekilde bir Objective C çalışma zamanına bağlanabilir ve çağrılabilir. C++ API Objective C++ ile uyumludur; Amaç C++.

C veya C++ bağlamaları kullanmadım; Ruby ya da Python ile yaptım ama hepsi aynı lib. Düz XML (potansiyel olarak kirli HTML'nin yanı sıra) okuyacaktır ve hem basit hem de güzel yazdırma seçeneklerine sahiptir.

13

Sen direcly GDataXMLNode kaynak kodunu değiştirebilirsiniz:

- (NSString *)XMLString { 
    ... 
    // enable formatting (pretty print/beautifier) 
    int format = 1; // changed from 0 to 1 
    ... 
} 

Alternatif: I (bakım nedeniyle) doğrudan kütüphane değiştirmek istemiyordu gibi

, ben kategori genişletmek için yazdı dışarıdan sınıfı:

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