尝试在YouTube XML上使用XSLT,遇到了一些名称空间问题
因此,我正在尝试编写一个XSLT脚本,将YouTube播放列表的默认RSS提要转换为更直观的格式。我想我或多或少地写下了代码,但是我遇到了名称空间的问题 基本上,有一个尝试在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解析器似乎被它卡住了,我不确定如何修复它(原始文档中从未定义过这两个名称空间)。我的代码如下所示:
<?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'