5

アプリ内でそれほど複雑ではないが大きなファイルを作成し、(MFMailComposeViewController を使用して) メールで送信できるようにしたい NSXMLElement および関連クラスは iPhone SDK に移植されていないため、XML ドキュメントを作成するためのオプション 前もって感謝します。

4

4 に答える 4

3

KissXMLの使用をお勧めします。著者は、あなたと同様の状況で開始し、libxml の周りに NSXML 互換の API ラッパーを作成しました。彼は、ブログでオプションと決定事項について説明しています

于 2010-10-19T23:15:49.050 に答える
2

恥知らずな自己宣伝:KSXMLWriter

于 2010-10-03T22:01:44.990 に答える
2

iOS 用のオープン ソース XML ストリーム ライターを試してください。

  • Objective-C で書かれており、単一の .h. および .m ファイル
  • 名前空間をサポートする @protocol とサポートしない @protocol

例:

// allocate serializer
XMLWriter* xmlWriter = [[XMLWriter alloc]init];

// start writing XML elements
[xmlWriter writeStartElement:@"Root"];
[xmlWriter writeCharacters:@"Text content for root element"];
[xmlWriter writeEndElement];

// get the resulting XML string
NSString* xml = [xmlWriter toString];

これにより、次の XML 文字列が生成されます。

<Root>Text content for root element</Root>
于 2010-10-19T23:09:59.220 に答える
-1

これは NSString 構築の宿題です。抽象的には、次のようなプロトコルを作成します。

@protocol XmlExport
-(NSString*)xmlElementName;
-(NSString*)xmlElementData;
-(NSDictionary*)xmlAttributes;
-(NSString*)toXML;
-(NSArray*)xmlSubElements;
@end

保存するすべてがそれを実装していることを確認し、次のようなもので XML を構築します。

-(NSString*)toXML {
    NSMutableString *xmlString;
    NSString *returnString;

    /* Opening tag */
    xmlString = [[NSMutableString alloc] initWithFormat:@"<%@", [self xmlElementName]];
    for (NSString *type in [self xmlAttributes]) {
        [xmlString appendFormat:@" %@=\"%@\"", type, [[self xmlAttributes] valueForKey:type]];
    }   
    [xmlString appendString:@">"];

    /* Add subelements */
    for (id<XmlExport> *s in [self xmlSubElements]) {
        [xmlString appendString:[s toXML]];
    }

    /* Data */
    if ([self xmlElementData]) {
        [xmlString appendString:[self xmlElementData]];
    }

    /* Close it up */
    [xmlString appendFormat:@"</%@>", [self xmlElementName]];

    /* Return immutable, free temp memory */
    returnString = [NSString stringWithString:xmlString];
    [xmlString release]; xmlString = nil;

    return returnString;
}
于 2010-10-03T10:02:32.607 に答える