所以我有一个XSL文件,我希望有一个嵌入式YouTube视频可以在同一页面上显示和播放而无需将我带到youtube。我有嵌入式代码,我试图使用XSL embed template example。
[注意:我已为每个参数添加了我的值]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="UTF-8"/>
<xsl:param name="contextPath">CONTEXT_PATH/</xsl:param>
<xsl:include href="xhtml.xsl"/>
<xsl:variable name="site" select="/home/tree/path/node[2]/@name"/>
<xsl:template match="home">
<xsl:element name="div">
<xsl:attribute name="id">content-type</xsl:attribute>
<xsl:attribute name="class">home</xsl:attribute>
<xsl:choose>
<xsl:when test="$site='Chameleon'">
<xsl:call-template name="video-media">
<xsl:with-param name="width" select="640"/>
<xsl:with-param name="height" select="348"/>
<xsl:with-param name="element" select="video-url"/>
</xsl:call-template>
<xsl:template name="video-media">
<xsl:param name="element" select="video-url" />
<xsl:param name="width" select="640"/>
<xsl:param name="height" select="348"/>
<xsl:param name="color" select="'ffffff'"/>
<xsl:param name="title" select="'0'"/>
<xsl:param name="byline" select="'0'"/>
<xsl:param name="portrait" select="'0'"/>
<xsl:param name="frameborder" select="'0'"/>
<xsl:param name="video-id">
<xsl:choose>
<xsl:when test="contains($element,'youtube.com/watch?v=Bctaf7alxpE')">
<xsl:value-of select="substring-after($element,'youtube.com/watch?v=Bctaf7alxpE')"/>
</xsl:when>
<xsl:when test="contains($element,'youtube.com/v/Bctaf7alxpE')">
<xsl:value-of select="substring-after($element,'youtube.com/v/Bctaf7alxpE')"/>
</xsl:when>
<xsl:when test="contains($element,'youtu.be/Bctaf7alxpE')">
<xsl:value-of select="substring-after($element,'youtube.com/watch?v=Bctaf7alxpE')"/>
</xsl:when>
</xsl:choose>
</xsl:param>
<div class="video-container">
<xsl:choose>
<xsl:when test="contains($element,'youtube.com') or contains($element, 'youtu.be')">
<iframe class="youtube-player" type="text/html" width="560" height="315" src="http://www.youtube.com/embed/Bctaf7alxpE" frameborder="0">
<xsl:comment> You Tube Player </xsl:comment>
</iframe>
</xsl:when>
</xsl:choose>
</div>
</xsl:template>
</xsl:when>
<xsl:when test="$site='anotherSite'">
<!-- Does Something Different here... -->
</xsl:when>
<xsl:otherwise>
<!-- Perform a default action here .... -->
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
但是,我不断收到服务器日志中的错误说明:
[CATALINA.OUT日志]
java.lang.NullPointerException
ERROR: 'null'
FATAL ERROR: 'Could not compile stylesheet'
[我的申请日志]
2014-09-11 17:28:41,731 WARN com。[我的应用程序/项目树] - 缺少参数,因此无法查找页面
我并不是真的担心日志,但是我得到一个空的事实真的令人沮丧,因为我为每个参数分配了一个值。
答案 0 :(得分:2)
如果没有看到完整的,最小的问题示例,很难肯定地说,但鉴于你发布的XSLT片段,这里有几种可能性:
xsl:call-template
不是孩子
xsl:stylesheet
。也许你的原始代码是正确的,
但鉴于您的代码片段的发布方式,它并不清楚
问题。@select
属性和子元素
xsl:choose
参数的{video-id
}。这两个错误中的任何一个都可能导致您的XSLT编译失败。
新发布的代码中存在更多基本错误:
</xsl:div>
应为</xsl:element>
。 (顺便说一下,<xsl:element
name="div">...</xsl:element>
可以简化为<div>...</div>
。)<xsl:template name="video-media">...</xsl:template>
必须是
感动成为xsl:stylesheet
的孩子。答案 1 :(得分:0)
解决了!!!
<xsl:template name="video-media">
模板必须是<xsl:stylesheet>
的孩子。但是,在名为<xsl:template match="home">
的其他模板中,我想调用<xsl:template name="video-media">
模板以允许嵌入的视频在<xsl:template match="home">
模板中播放。
这是通过代码实现的:
<xsl:call-template name="video-media">
,给定@select
中的参数值
感谢帮助!!