NSXMLNode クラスリファレンス 翻訳元
このページの最終更新:2010-02-06
ADCの最終更新:2009-10-19
ADCの最終更新:2009-10-19
継承するクラス | NSObject |
準拠しているプロトコル | NSCopying NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能な環境 | Mac OS X v10.4以降 |
宣言ファイル | NSXMLNode.h NSXMLNodeOptions.h |
コンパニオンガイド | Tree-Based XML Programming Guide for Cocoa |
サンプルコード | AlbumToSlideshow Core Data HTML Store MovieAssembler TimelineToTC XMLBrowser |
概観(Overview)
NSXMLNodeクラスのオブジェクトはXMLドキュメントを表す抽象的かつ論理的な木構造のノードです。ノードオブジェクトはエレメント、属性、テキスト、処理命令、名前空間、コメントなどのXMLドキュメントのマークアップの構成体それぞれに相当する異なる種類のノードになることができます。さらに、ドキュメントノードオブジェクト(具体的にはNSXMLDocument?のインスタンス)はXMLドキュメントそれ自体を表します。またNSXMLNodeオブジェクトはドキュメントタイプ定義(DTD)内での宣言だけでなくドキュメントタイプの宣言も表すことができます。NSXMLNodeクラスのクラスファクトリを使えば、それぞれの種類のノードを生成することができます。ドキュメント、エレメント、DTDノードだけが子ノードを持つことができます。
NSXML系列のクラス、つまり「NSXML」がつくFoundationクラス(NSXMLParser?を除く)はNSXMLNodeクラスをベースにしています。このクラスを継承しているクラスは、NSXMLElement?、NSXMLDocument?、NSXMLDTD?、そしてNSXMLDTDNode?です。NSXMLNodeクラスはXMLノードオブジェクトの共通のインターフェースを明確にし、ノードに共通する動作や属性(例えば階層のレベル、ノードの名前や値、木の走査、代表的なXMLのマークアップテキストを出力する機能など)を定義します。
NSXML系列のクラス、つまり「NSXML」がつくFoundationクラス(NSXMLParser?を除く)はNSXMLNodeクラスをベースにしています。このクラスを継承しているクラスは、NSXMLElement?、NSXMLDocument?、NSXMLDTD?、そしてNSXMLDTDNode?です。NSXMLNodeクラスはXMLノードオブジェクトの共通のインターフェースを明確にし、ノードに共通する動作や属性(例えば階層のレベル、ノードの名前や値、木の走査、代表的なXMLのマークアップテキストを出力する機能など)を定義します。
サブクラス作成時の注意(Subclassing Notes)
サポートされているものと異なる種類のノードを利用したい時には、NSXMLNodeクラスのサブクラスを作成することができます。XMLNodeに比べより特化した動作や属性を持つサブクラスを作ることもできます。
オーバーライドするメソッド(Methods to Override)
NSXMLNodeのサブクラスを作成する為には、主要なイニシャライザであるinitWithKind:options:?メソッドと、以下のリストのメソッドをオーバーライドする必要があります。多くの場合、単にスーパークラスの実装を呼び出すか、必要に応じてその前後にサブクラス特有のコードを書くだけで構いません。
kind? | parent? |
name? | childAtIndex:? |
setName:? | childCount? |
objectValue? | children? |
setObjectValue:? | detach? |
stringValue? | localName? |
setStringValue:resolvingEntities:? | prefix? |
index? | URI? |
NSObjectのメソッドisEqual:?のNSXMLNodeのデフォルトの実装では、深い比較を実行します。NSXMLNode同士の名前、子ノード、属性等が全て同じでない限り等値とは見なされません。この比較ではノードの子は調べますが、親は調べません。これとは違う基準で比較を行いたい場合には、isEqual:?メソッドをオーバーライドしてください。
特に気をつけること(Special Considerations)
NSXMLのデータモデルとデータ構造ゆえに、カスタムクラスでNSXMLDocument?クラスのクラスメソッドreplacementClassForClass:?メソッドをオーバーライドしてNSXMLクラスの代わりにカスタムクラスを返すようにしない限り、XMLを解析、処理している時にカスタムクラスを知ることができません。カスタムクラスがNSXML系列の直系のオブジェクトでないとき、例えばカスタムクラスがCDATAセクションを表すNSXMLNodeのサブクラスであるときなどは、新しいノードを作成し、それを適切な位置に挿入した後に木構造を走査することができます。
採用しているプロトコル(Adopted Protocols)
このクラスでできること(Tasks)
ノードオブジェクトの生成と初期化(Creating and Initializing Node Objects)
– initWithKind:?
– initWithKind:options:?
+ document?
+ documentWithRootElement:?
+ elementWithName:?
+ elementWithName:children:attributes:?
+ elementWithName:stringValue:?
+ elementWithName:URI:?
+ attributeWithName:stringValue:?
+ attributeWithName:URI:stringValue:?
+ textWithStringValue:?
+ commentWithStringValue:?
+ namespaceWithName:stringValue:?
+ DTDNodeWithXMLString:?
+ predefinedNamespaceForPrefix:?
+ processingInstructionWithName:stringValue:?
– initWithKind:options:?
+ document?
+ documentWithRootElement:?
+ elementWithName:?
+ elementWithName:children:attributes:?
+ elementWithName:stringValue:?
+ elementWithName:URI:?
+ attributeWithName:stringValue:?
+ attributeWithName:URI:stringValue:?
+ textWithStringValue:?
+ commentWithStringValue:?
+ namespaceWithName:stringValue:?
+ DTDNodeWithXMLString:?
+ predefinedNamespaceForPrefix:?
+ processingInstructionWithName:stringValue:?
XMLノードオブジェクトの管理(Managing XML Node Objects)
– index?
– kind?
– level?
– setName:?
– name?
– setObjectValue:?
– objectValue?
– setStringValue:?
– setStringValue:resolvingEntities:?
– stringValue?
– setURI:?
– URI?
– kind?
– level?
– setName:?
– name?
– setObjectValue:?
– objectValue?
– setStringValue:?
– setStringValue:resolvingEntities:?
– stringValue?
– setURI:?
– URI?
ツリーノードのナビゲート(Navigating the Tree of Nodes)
– rootDocument?
– parent?
– childAtIndex:?
– childCount?
– children?
– nextNode?
– nextSibling?
– previousNode?
– previousSibling?
– detach?
– parent?
– childAtIndex:?
– childCount?
– children?
– nextNode?
– nextSibling?
– previousNode?
– previousSibling?
– detach?