【发布时间】: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&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 用于没有名称空间的 xml 和具有正确父子关系但不喜欢这个 RSS 提要的 xml。注意条目不包含在条目或任何内容中。
感谢任何帮助。我想使用 xslt,因为我想更改 iTunes 链接以通过我的附属帐户 - 所以自动化的东西对我不起作用。
【问题讨论】:
-
好问题 (+1)。即使是中级 XSLT 程序员也会偶然发现这个问题。你有我的回答来解释这个问题以及如何解决它。 :)
-
@jd:然后,将您的 XSLT 指令:
<xsl:apply-templates match="entry"/>替换为<xsl:apply-templates match="atom:entry"/>此外,以类似的方式替换所有其他元素名称,从elementName到atom:elementName