0

因此,我正在尝试编写一个 XSLT 脚本,它将 YouTube 播放列表的默认 RSS 提要转换为视觉上更令人愉悦的格式。我想我的代码或多或少已经被关闭了,但我遇到了我认为命名空间的问题。

基本上,我的 XSLT 解析器似乎卡住了一个<yt:videoid>和一个<media:description>标记,我不确定如何修复它(原始文档中从未定义过命名空间)。我的代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="feed/entry">
    <item>
        <title><xsl:value-of select="title" /></title>
        <description>
        <![CDATA[<img src="http://i.ytimg.com/vi/{yt:videoid}/hqdefault.jpg">
        <br />
        <br />
        <xsl:value-of select="media:description">
        <br />
        <br />          
        <iframe width="560" height="315" src="http://www.youtube.com/embed/{yt:videoid}" frameborder="0" allowfullscreen></iframe>]]>
        </description>
        <link>http://www.youtube.com/watch?v={yt:videoid}</link>
        <guid isPermaLink="false">http://www.youtube.com/watch?v={yt:videoid}</guid>
        <pubDate><xsl:value-of select="updated" /></pubDate>
    </item>

当我运行它时,它编译时会出现一堆“未定义 Y 上的命名空间前缀 X”错误,并且在我包含{yt:videoid}media:description显示为纯文本而不是适当值的任何地方。

另一个更小的问题是 XML 文档是用

<feed xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007' gd:etag='W/&quot;Ak8EQX47eCp7I2A9WhdSEkQ.&quot;'>

它甚至不会解析,除非我手动将其削减为<feed>. 同样,这是一个小得多的问题,我更愿意解决第一个问题。如果有人有任何建议,我将不胜感激!

亚当

4

1 回答 1

0

总而言之,XSLT 缺少 XML 中存在的名称空间。因此,如果 XML 包含以下命名空间:

xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' 
xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' 
xmlns:gd='http://schemas.google.com/g/2005'    
xmlns:yt='http://gdata.youtube.com/schemas/2007'

您还需要将其添加到元素中。下面有一个很好的阅读理解下面的 XML 命名空间:

http://msdn.microsoft.com/en-us/magazine/cc302166.aspx

于 2012-04-20T01:24:53.217 回答