2011-06-19 13 views
7

मैं स्वरूपित और एक XML स्ट्रिंग मुद्रित करने के लिए अपने iOS आवेदन में GDataXML उपयोग कर रहा हूँ और चाहता हूँ एक सरल तरीका - "सुंदर प्रिंट"आईओएस - एक्सएमएल सुंदर प्रिंट

किसी उद्देश्य सी में एक एल्गोरिथ्म का पता है, या जो मैं दूसरी भाषा में काम करता हूं जिसका अनुवाद मैं कर सकता हूं?

उत्तर

1

मैंने इस तरह की चीजों के लिए HTML Tidy (http://tidy.sourceforge.net/) का उपयोग किया है। यह एक सी लाइब्रेरी है, इसलिए जब तक आप सी के साथ सहज महसूस करते हैं, तब तक ऑब्जेक्टिव सी रनटाइम से काफी आसानी से कॉल किया जा सकता है। सी ++ एपीआई उद्देश्य सी ++ से कॉल करने योग्य है, इसलिए यदि आप आरामदायक हैं तो इसका उपयोग करना आसान हो सकता है उद्देश्य सी ++।

मैंने सी या सी ++ बाइंडिंग का उपयोग नहीं किया है; मैंने रूबी या पायथन के माध्यम से किया लेकिन यह सब एक ही lib है। यह सीधे एक्सएमएल (साथ ही संभावित रूप से गंदे एचटीएमएल) पढ़ेगा और इसमें दोनों सरल और सुंदर प्रिंट विकल्प होंगे।

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 
संबंधित मुद्दे