尝试在YouTube XML上做一些XSLT魔术,遇到了一些命名空间问题



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

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

<?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>,否则它甚至不会解析. 同样,这是一个小得多的问题,我更愿意解决第一个问题。 如果有人有任何建议,我将不胜感激!

亚当

总结一下这个问题,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

相关内容

  • 没有找到相关文章

最新更新