從下面的XML我試圖檢索序列中的第二個元素。注意,結束節點與每個條目的開始部分相同,這使得它的檢索有點棘手。使用cocoa如何讓SAX在XML中區分endElements時它們是否相同?
我試着在startElementSAX函數中設置for循環來評估和拾取Width =「60」屬性。儘管這會正確地對數據進行排序,但仍然會導致目標屬性接收序列中的最後一個路徑。我認爲這是因爲爲了檢索節點的屬性,需要首先發現它。所以這也是每次發送。我一直無法找到一種隔離這種情況的方法。
我做了一個跟蹤,確認每次發送所有三條路徑,無論啓動條件如何。如果我能夠將它們附加到不同的屬性,這不會成爲問題。
如果你想看完整的項目,它在蘋果iPhone開發中心,名爲TopSongs。您可能需要密碼。
<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;
你是絕對正確的,coverArt需要增量索引。我不確定這是否應該在正在處理的SAX事件中完成。如果我正確地理解了你,我應該在SAX過程之外進行排序,並將它作爲預先格式化的SAX結構傳遞並最終重置索引? – Jim