2008年9月10日水曜日

CocoaでXML文書を作成する

追記(2008/12/14):名前空間についてはこちら



基本はおそらくこれ.
NSXMLDocument* document= [NSXMLNode document];
NSXMLElement* root= [NSXMLNode elementWithName:@"root"];
[document setRootElement:root];
NSString* output= [document XMLString];


出力はこう.
<root></root>


XMLのバージョン追加はこう?
[document setVersion:@"1.0"];


DOCTYPEの宣言はこう.
NSXMLDTD* dtd= [[[NSXMLDTD alloc] init] autorelease];
[dtd setPublicID:@"__URL__"]; //SYSTEMの場合はsetSystemID:
[document setDTD:dtd];


コメントはこう?
[document addChild:[NSXMLNode commentWithStringValue:@"__Comment_String__"]];


子要素の追加はこう?
NSXMLElement* child= [NSXMLNode elementWithName:@"child"];
[root addChild:child];


属性の追加はこう?
[child addAttribute:[NSXMLNode attributeWithName:@"attrKey" stringValue:@"attrVal"]];
'addChild:'じゃないよ.

以上をまとめるとこう.
NSXMLDocument* document= [NSXMLNode document];

[document setVersion:@"1.0"];

NSXMLDTD* dtd= [[[NSXMLDTD alloc] init] autorelease];
[dtd setPublicID:@"__URL__"];
[document setDTD:dtd];

[document addChild:[NSXMLNode commentWithStringValue:@"__Comment_String__"]];

NSXMLElement* root= [NSXMLNode elementWithName:@"root"];
[document setRootElement:root];

NSXMLElement* child= [NSXMLNode elementWithName:@"child"];
[root addChild:child];

[child addAttribute:[NSXMLNode attributeWithName:@"attrKey" stringValue:@"attrVal"]];

NSString* output= [document XMLString];
NSLog(@"%@", output);


出力はこう.
<?xml version="1.0"?>
<!DOCTYPE PUBLIC "__URL__">
<!--__Comment_String__--><root><child attrKey="attrVal"></child></root>


出力を見やすく整形して出力するにはこう?
NSString* output= [document XMLStringWithOptions:NSXMLNodePrettyPrint];


出力はこう.
<?xml version="1.0"?>
<!DOCTYPE PUBLIC "__URL__">

<!--__Comment_String__-->
<root>
<child attrKey="attrVal"></child>
</root>


子要素の無い要素を<name/>で表現するのはこう?
NSString* output= [document XMLStringWithOptions:NSXMLNodeCompactEmptyElement];


出力はこう.
<?xml version="1.0"?>
<!DOCTYPE PUBLIC "__URL__">
<!--__Comment_String__--><root><child attrKey="attrVal"/></root>


同時に指定するにはこう?
NSString* output= [document XMLStringWithOptions:(NSXMLNodePrettyPrint|NSXMLNodeCompactEmptyElement)];


出力はこう.
<?xml version="1.0"?>
<!DOCTYPE PUBLIC "__URL__">

<!--__Comment_String__-->
<root>
<child attrKey="attrVal"/>
</root>


あってる?

0 件のコメント: