0

以下のXMLから、シーケンスの2番目の要素を取得しようとしています。終了ノードは各エントリの開始ノードと同じであることに注意してください。これにより、取得が少し難しくなります。

startElementSAX関数でforループを設定して、Width="60"属性を評価および取得しようとしました。これによりデータが正しく並べ替えられますが、ターゲットプロパティはシーケンスの最後のパスを受け取ります。ノードの属性を取得するには、最初にそれを検出する必要があるためだと思います。したがって、これも毎回送信されます。私はこれを発生から隔離する方法を見つけることができませんでした。

開始基準に関係なく、3つのパスすべてが毎回送信されることを確認するトレースを作成しました。それらを別のプロパティにアタッチできれば、これは問題にはなりません。

プロジェクト全体を見たい場合は、TopSongsと呼ばれるApple iPhoneDevCenterにあります。パスワードが必要な場合があります。

<itms:coverArt height="53" width="53">http://a1.phobos.apple.com/us/r1000/030/Music/7f/b0/f6/mzi.erhtxklr.53x53-50.jpg</itms:coverArt>
<itms:coverArt height="60" width="60">http://a1.phobos.apple.com/us/r1000/030/Music/7f/b0/f6/mzi.erhtxklr.60x60-50.jpg</itms:coverArt>
<itms:coverArt height="100" width="100">http://a1.phobos.apple.com/us/r1000/030/Music/7f/b0/f6/mzi.erhtxklr.100x100-75.jpg</itms:coverArt>  

これは私がこれまでに持っているendElementコードです。

static void endElementSAX(void *parsingContext, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI) {    
iTunesRSSImporter *importer = (iTunesRSSImporter *)parsingContext;
if (importer.parsingASong == NO) return;
} else if (!strncmp((const char *)prefix, kName_Itms, kLength_Itms)) {
if (!strncmp((const char *)localname, kName_CoverArt, kLength_CoverArt)) {
importer.currentSong.coverArt60 = importer.currentString;
4

1 に答える 1

0

XMLに任意の追加の意味を適用しています。<itms> ... </ itms>要素のリストから要素#2が必要であると決定しました。このドキュメントでは、その特定の要素を別の/特別なものとして呼び出していないため、自分で行う必要があります。

したがって、これを解析自体の外部で行うための簿記を保持する必要があります(#2が他の部分と異なることを示すものがドキュメントにないため)。

最も簡単な方法は、グローバル変数を宣言することです...

unsigned int coverArtIndex;

次に、アイテムのグループの解析を開始する前に、0に設定します。アイテム#2が必要なタグの先頭に到達するたびにインクリメントし、2の場合は、必要なデータを吸い取ってどこかに保存します。次に、残りをスキップします(SAXイベントが処理される間は何もしません)。グループの最後に到達したら、coverArtIndexをリセットします。

于 2009-09-13T22:13:00.780 に答える