尝试在YouTube XML上使用XSLT,遇到了一些名称空间问题

尝试在YouTube XML上使用XSLT,遇到了一些名称空间问题,xml,xslt,youtube-api,xml-namespaces,Xml,Xslt,Youtube Api,Xml Namespaces,因此,我正在尝试编写一个XSLT脚本,将YouTube播放列表的默认RSS提要转换为更直观的格式。我想我或多或少地写下了代码,但是我遇到了名称空间的问题 基本上,有一个和一个标记,我的XSLT解析器似乎被它卡住了,我不确定如何修复它(原始文档中从未定义过这两个名称空间)。我的代码如下所示: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.o

因此,我正在尝试编写一个XSLT脚本,将YouTube播放列表的默认RSS提要转换为更直观的格式。我想我或多或少地写下了代码,但是我遇到了名称空间的问题

基本上,有一个
和一个
标记,我的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>
它甚至不会解析,除非我手动将其缩减为
。同样,这是一个小得多的问题,我更愿意解决第一个问题。如果有人有什么建议,我将非常感激


Adam

总结一下,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名称空间的好书:


尝试将xmlns:yt=''属性添加到元素中。看起来您正试图在不同的XML名称空间中使用元素,而这正是问题的症结所在。您的评论实际上帮了大忙。我意识到我实际上需要在两个文档中都包含
feed
标记中的所有内容,所以我在原始文档中的
root
标记中包含了它,在xslt文档中的
xsl
标记中包含了它。现在,我可以让它无错误地编译,但是无论我在哪里尝试使用名称空间标记,如
yt:videoid
media:description
,它仍然拒绝获取值。有什么建议吗?有没有可能提供要转换的XML文档和更新的XSLT。我怀疑您的选择条目有问题。(即,如果定义了xmlns:atom=“”,则select=“feed/entry”应为“atom:feed/atom:entry”在你的元素中。你在这方面取得了任何进展吗?嘿,如果你还想知道的话,我解决了它。在解决了所有关于命名空间的废话之后,唯一导致出现问题的是
yt:videoid
media:description
都包含在一个我没有注意到的
块中因为1)我是个白痴,2)YouTube的代码乱七八糟。无论如何,谢谢你的帮助!
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'