通过xslt翻译itunes affiliate rss

时间:2010-03-25 19:02:38

标签: xslt rss itunes

我不能让这个为我的生活而工作。这是我从itunes affiliate的RSS提要获得的xml片段。我想要在标签中打印顶部值,但我不能出于某种原因:

<?xml version="1.0" encoding="utf-8"?>

    <feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
            <id>http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/sf=143441/limit=100/genre=6014/xml</id><title>iTunes Store: Top Paid Applications</title><updated>2010-03-24T15:36:42-07:00</updated><link rel="alternate" type="text/html" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=25180&amp;popId=30"/><link rel="self" href="http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/sf=143441/limit=100/genre=6014/xml"/><icon>http://phobos.apple.com/favicon.ico</icon><author><name>iTunes Store</name><uri>http://www.apple.com/itunes/</uri></author><rights>Copyright 2008 Apple Inc.</rights>

                    <entry>
                            <updated>date</updated>

                                    <id>someID</id>

                                    <title>a</title>
                                    <im:name>b</im:name>
                    </entry>
                    <entry>
                            <updated>date2/updated>

                                    <id>someID2</id>

                                    <title>a2</title>
                                    <im:name>b2</im:name>
                    </entry>
    </feed>

如果我尝试<xsl:apply-templates match="entry"/>,它会吐出文件的全部内容。如果我使用<xsl:call-template name="entry">它只显示一个条目,我必须使用<xsl:value-of select="//*[local-name(.)='name']"/>来获取名称,但这是一个黑客。我之前使用xslt for xml没有名称空间和xml有正确的父子关系但不喜欢这个RSS feed。通知条目不包含在条目或任何内容中。

感谢任何帮助。我想使用xslt因为我想改变itunes链接以通过我的联盟帐户 - 所以自动化的东西对我不起作用。

1 个答案:

答案 0 :(得分:1)

您匹配的是没有命名空间的元素,但XML文档中的实际元素属于(deafult)namspace xmlns="http://www.w3.org/2005/Atom"

因此,您需要在样式表中声明命名空间,比如说xmlns:atom="http://www.w3.org/2005/Atom"。然后不仅匹配{elementName}而且匹配{atom:elementName},其中{elementName}在你的情况下是:“entry”。