2011-06-19 15 views
7

estoy usando GDataXML en mi aplicación iOS y quiero una manera sencilla para dar formato e imprimir una cadena XML - "impresión bonita"IOS - XML ​​Imprimir Bastante

¿alguien sabe de un algoritmo en Objective C, o uno que funciona en otro idioma que puedo traducir?

Respuesta

1

He usado HTML Tidy (http://tidy.sourceforge.net/) para cosas como esta. Es una biblioteca C por lo que puede vincularse y ejecutarse desde un tiempo de ejecución de Objective C con bastante facilidad siempre que se sienta cómodo con C. La API de C++ se puede llamar desde Objective C++, por lo que podría ser más fácil de usar si se siente cómodo Objetivo C++.

No he usado los enlaces C o C++; Lo hice a través de Ruby o Python, pero es la misma lib. Leerá XML directamente (así como potencialmente HTML sucio) y tiene opciones de impresión simples y bonitas.

13

Puede modificar el código fuente de GDataXMLNode direcly:

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

Alternativa:

Como no quería modificar la biblioteca directamente (por razones de mantenimiento), que escribió esa categoría para extender la clase desde fuera:

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 
Cuestiones relacionadas