从下面的 XML 中,我试图检索序列中的第二个元素。请注意,结束节点与每个条目中的开始节点相同,这使其检索有点棘手。
我尝试在 startElementSAX 函数中设置一个 for 循环来评估和获取 Width="60" 属性。尽管这将正确地对数据进行排序,但它仍然会导致目标属性接收序列中的最后一条路径。我认为这是因为为了检索节点的属性,需要首先发现它。所以这也是每次都会发送的。我一直无法找到一种方法来避免这种情况发生。
我做了一个跟踪,确认每次都发送所有三个路径,而不管启动标准如何。如果我能够将它们附加到不同的属性,这将不是问题。
如果您想查看整个项目,它位于名为TopSongs的 Apple iPhone 开发中心。您可能需要密码。
<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;