我在获取属性值(即URL)并将“ .webvtt”替换为“ .vtt”时遇到麻烦。我找到了与调用函数的语句一起使用的示例,但是我试图调用从另一个SO线程(thanks Dimitre Novatchev)获取的模板。 XSLT应该复制所有内容,然后匹配元素media:content中的属性“ url”,并用vtt查找和替换值中的webvtt。当前,它写入一个空的url属性。
XML:
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:os="http://a9.com/-/spec/opensearch/1.1/"
version="2.0">
<channel>
<title>Distribution Feed</title>
<link>http://feed.somelocation.com</link>
<description>Distribution</description>
<os:startIndex>1</os:startIndex>
<os:itemsPerPage>100</os:itemsPerPage>
<item>
<title>
Yadda Yadda
</title>
<description>Blah blah</description>
<author/>
<media:group>
<media:content channels="2"
samplingrate="44.1"
bitrate="2631.083"
medium="video"
duration="128.195"
expression="full"
fileSize="42161461"
framerate="29.97"
type="video/mp4"
height="720"
isDefault="false"
lang="en"
url="http://myorigin.here/example.webvtt?parameters=here" />
</media:group>
<pubDate>Tue, 16 Oct 2018 14:41:41 GMT</pubDate>
</item>
</channel>
</rss>
还有我的XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:media="http://search.yahoo.com/mrss/" >
<xsl:output method="xml" indent="yes"/>
<xsl:template name="string-replace-all">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="$text = '' or $replace = ''or not($replace)" >
<!-- Prevent this routine from hanging -->
<xsl:value-of select="$text" />
</xsl:when>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Just copy everything to the output... -->
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="media:content/@url">
<xsl:attribute name="url">
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="./@url" />
<xsl:with-param name="replace" select="'webvtt'" />
<xsl:with-param name="by" select="'vtt'" />
</xsl:call-template>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
调用模板时,您已经在@url
的上下文中-请替换:
<xsl:with-param name="text" select="./@url" />
具有:
<xsl:with-param name="text" select="." />