【问题标题】:Translating itunes affiliate rss via xslt通过 xslt 翻译 iTunes 附属 RSS
【发布时间】:2010-03-25 19:02:37
【问题描述】:

我不能让这个为我的生活工作。这是我从 iTunes 附属公司的 RSS 提要中获得的 xml 的 sn-p。我想打印标签中的值,但由于某种原因我不能:

<?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>

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

感谢任何帮助。我想使用 xslt,因为我想更改 iTunes 链接以通过我的附属帐户 - 所以自动化的东西对我不起作用。

【问题讨论】:

  • 好问题 (+1)。即使是中级 XSLT 程序员也会偶然发现这个问题。你有我的回答来解释这个问题以及如何解决它。 :)
  • @jd:然后,将您的 XSLT 指令:&lt;xsl:apply-templates match="entry"/&gt; 替换为 &lt;xsl:apply-templates match="atom:entry"/&gt; 此外,以类似的方式替换所有其他元素名称,从 elementNameatom:elementName

标签: xslt rss itunes


【解决方案1】:

您正在匹配不在命名空间中的元素,但 XML 文档中的实际元素确实属于(默认)命名空间xmlns="http://www.w3.org/2005/Atom"

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

【讨论】:

  • 我试过你所说的,但我的大脑阻止了这个概念。这是我尝试但没有结果的方法。饲料是最重要的元素吗?我尝试了 atom:entry 但它没有进入我的条目模板。谢谢。
  • 这是我的 xslt 标头。 itunes.apple.com/rss" xmlns:atom="w3.org/2005/Atom" xmlns:xsl="w3.org/1999/XSL/Transform">
  • @jd:然后,将您的 XSLT 指令:&lt;xsl:apply-templates match="entry"/&gt; 替换为 &lt;xsl:apply-templates match="atom:entry"/&gt; 此外,以类似的方式替换所有其他元素名称,从 elementNameatom:elementName
  • 非常感谢 Dimitre!我发誓我试过了。我尝试了很多组合。它现在可以工作了。我已经使用这个网站多年了,通常可以通过查看其他问题找到我需要的内容,但是我无法理解这个问题,所以我注册了。我现在会在这里帮助其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2012-09-21
  • 1970-01-01
  • 2014-04-15
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多