0

コード内の他の場所からのコピーであるNSXMLElementがあります。使用後は、NSXMLDocumentに接続されなくなります。それは(私が信じていることですが)何にもリンクされていません。

NSXMLElementをNSLogすると、内容が表示されます。私はそれを見ることができます。

しかし、nodesForXPathを使用しようとすると、何も返されません。空白です。何も見つかりません(*を検索した場合を除き、その場合は/ t / t / n / t / tですべてが返されます)。

ここで、そのNSXMLElementを新しいNSXMLDocumentのルートにしてから、新しいドキュメントを検索すると、XPathを完全に検索できます。

私はそこでの論理を理解しようとしています。私はドキュメントを読んでいますが、ここで何が起こっているのかを説明するものは何も見つかりませんでした(または、少なくとも、ドキュメントで見つけた場合は理解できません)。

なぜこれが起こっているのか、そしてこのNSXMLDocumentを使用する必要があるかどうかを正確に理解するのを手伝ってくれる人に本当に感謝しています。

これが私のコードです:

要素は、保存されたNSXMLElementsのNSArrayからのNSXMLElementです。これらは別のメソッドで使用されるドキュメントからのコピーです)

NSArray* scene = [element nodesForXPath:@"scene[1]" error:nil];
NSLog(@"scene: %@", [[scene objectAtIndex:0] stringValue]);

しかし、これを行うと、次の結果が得られます。

NSXMLDocument* docElement = [[NSXMLDocument alloc] initWithRootElement:element];
NSArray* scene = [docElement nodesForXPath:@"scene[1]" error:nil];
NSLog(@"scene: %@", [[scene objectAtIndex:0] stringValue]);
4

1 に答える 1

0

これは、libxml2で使用されるxpathコンテキストがドキュメントへの参照を保持していることが原因である可能性があります。ドキュメントがない場合は、操作方法がわからない可能性があります。*を検索した場合の動作は、すべてを返す必要があることを認識しているため、検索を試みないため、特殊なケースである可能性があります。

于 2011-09-07T00:15:50.737 に答える