2012-04-25 9 views
1

の書き込みNSXMLElementは、私は次のように私は、一定のUSER_PRINTXML_URLで定義されたファイルを取得し、そこからNSXMLDocumentを、作成しています:ココア - NSXMLDocument

NSXMLDocument *ads_user_printxml = [[NSXMLDocument alloc] initWithContentsOfURL: [NSURL URLWithString:USER_PRINTXML_URL] options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA)           error:&ads_err]; 

その後、私はXMLで目的の場所に到達するためにXPathを使いますなどのファイルは、以下のとおり

NSArray* ipp_folder = [[ads_user_printxml nodesForXPath:@".//root/printing/IPP"error:&ads_err] objectAtIndex:0]; 

を今、私はそれを行うのですかどのように、XMLファイル内の要素の後にNSXMLElementsを追加したい場合は?

私は、次の操作を実行しようとしている:

NSXMLElement *s= [ipp_folder objectAtIndex:0]; 

しかし、これは、実行時エラーを生成しています。 NSArrayにデータを入れるのではなくNSXMLNodeを使ってみましたが、もう一度役に立たないようにしました。私は解決が非常に単純だと信じていますが、私の人生はドキュメントで答えを見つけることができません。

ありがとうございました。

答えて

2

-nodesForXPath:error:NSArray*を返しますが、2番目のコードスニペットにはすでに-objectAtIndex:が適用されています。したがって、ipp_folderは配列を保持せず、NSXMLNodeへのポインタを保持します。宣言された型を修正します。

-indexメソッドを使用して、-parentメソッドとその親の子のインデックスを使用してその親を識別できます。その後、親がNSXMLElementで、あなたがすることができると仮定すると:あなたは「親がNSXMLElementであると仮定すると、」言うとき

[[ipp_folder parent] insertChild:someNewNode atIndex:[ipp_folder index] + 1]; 
+0

、どのように私はそれがあることを宣言することができますか? 親がXMLファイルので、の間に子を挿入したい場合、[ipp_folder parent]がNSXMLNodeを返し、NSXMLElementを返さないとすれば、どのようにすればよいでしょうか?ケンありがとう! – Kevin

+1

与えられたXPathから、アイテム自体がIPP要素になるのを待ちます。それに挿入したい場合は、その親は必要ありません。 (元々、IPP要素の後ろに挿入したかったと言っていました。)したがって、変数をその型として宣言することができます: 'NSXMLElement * ipp_folder = ...'。もしそれが正しいことを確認したいなら、 '[ipp_folder kind] == NSXMLElementKind'をチェックすることができます。そして、 '-addChild:'を使って、その親ではなく、直接その中に挿入するだけです。 –

+0

私はIPPに言いました。あなたは正しいですNSElement * ipp_folder = ...は動作します.. 私はobjectAtIndex:intパラメータを使用していたときにNSArrayを宣言していると思います。 ケンはあなたの助けをたくさんありがとう。 – Kevin