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ć?
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ć?
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.
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