2011-06-19 18 views
7

Używam GDataXML w mojej aplikacji iOS i chcą w prosty sposób formatować i drukować ciąg XML - „Pretty print”iOS - XML ​​Dość Drukuj

Czy ktoś wie z algorytmu w celu C, lub taki, który działa w innym języku, który mogę przetłumaczyć?

Odpowiedz

1

Użyłem HTML Tidy (http://tidy.sourceforge.net/) do takich rzeczy. Jest to biblioteka C, która może być łączona i wywoływana z środowiska wykonawczego Objective C dość łatwo, o ile dobrze czujesz się z C. Interfejs API C++ można wywoływać w Objective C++, więc może być łatwiejszy w użyciu, jeśli nie masz nic przeciwko Objective C++.

Nie użyłem powiązań C lub C++; Zrobiłem to przez Ruby lub Python, ale to wszystko to samo. Będzie czytać proste XML (a także potencjalnie brudny HTML) i ma zarówno proste, jak i ładne opcje drukowania.

13

Można modyfikować kod źródłowy GDataXMLNode direcly:

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

Alternatywa:

Jak nie chcesz zmodyfikować bibliotekę bezpośrednio (ze względów konserwacyjnych) napisałem, że kategoria przedłużyć klasa z zewnątrz:

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