2

私はこのXMLファイルを持っています:

<item>
<title>App1</title>
<link><![CDATA[SomeLink]]></link>
<description><![CDATA[SomeText]]></description>
</item>

各要素の CDATA を取得して各 NSMutableDictionary に保存するにはどうすればよいですか? foundCDATA デリゲートで比較する elementName がありません。

私はfoundCharactersでこの行を試しました:

if ([currentElement isEqualToString:@"link"]) [currentLink appendString:string];

しかし、私はnilを取得し、同じviewcontrollerの別のパーサーに使用しているため、foundCDATAデリゲートを削除できません。

4

3 に答える 3

2

foundCDATA デリゲートで比較する elementName がありません。

パーサー デリゲートは、以前-parser:didStartElement:namespaceURI:qualifiedName:attributes:に要素を受け取っています。それを使用して状態を更新し、次のメッセージが届いたときにどの要素が解析されているかを認識できるようにする必要があります。-foundCDATA:-foundCharacters:

于 2012-05-27T06:07:55.947 に答える
0

最良の(より正確には最も一般的な)アプローチは、ネストされた要素から何らかの方法でスタックを構築することです。これにより、事実上、解析中にXMLドキュメントの上から下まで構造全体を表示できるようになります。RSSパーサーの構築中にこれを行う方法をご覧ください:https ://github.com/H2CO3/RSSKit/blob/master/RSSParser.m

基本的に、あなたがしなければならないのは、実装parser:didStartElement:などparser:didEndElement:です(簡単にするために、完全なセレクター名は入力しません)。次に、前者のメソッドでコンポーネントを追加し、後者のメソッドでコンポーネントを削除する、Unixライクなファイルパスの文字列(私が行っていること)を維持するか、NSMutableArrayまたはカスタムスタックオブジェクトを構築して、必要なものをプッシュすることができますXML要素のパラメータ。

于 2012-05-27T06:22:36.153 に答える
0

インスタンス変数 (NSString *currentElement など) をデリゲート クラスに追加し、次のコードをデリゲートに追加してその変数の値を設定できます。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    currentElement = elementName;
}

次に、foundCDATA 内の現在の要素の名前にアクセスできます。

于 2012-05-27T06:06:54.927 に答える