所以我之前从未使用过XSLT,所以这可能是一个非常简单的问题。基本上,我的工作是章节视频,我们使用的程序生成一个XML文档,其中包含成对的时间码(章节开始,以毫秒为单位)和标题(章节的名称)。我想要做的是将其重新排列为Final Cut Pro理解的格式。
程序以下列格式生成数据:
<marker time="27">
<label>Introduction</label>
</marker>
和Final Cut需要这种格式(时间码转换为帧,又称为33.3):
<marker>
<name>Introduction</name>
<comment> <CHAPTER>
</comment>
<color>
<alpha>0</alpha>
<red>127</red>
<green>0</green>
<blue>255</blue>
</color>
<in>27</in>
<out>-1</out>
</marker>
我写的代码是:
<xsl:template match="/">
<xsl:for-each select="captionate/markers/marker">
<marker>
<name><xsl:value-of select="label"/></name>
<comment> <CHAPTER>
</comment>
<color>
<alpha>0</alpha>
<red>127</red>
<green>0</green>
<blue>255</blue>
</color>
<in><xsl:value-of select="@time"/></in>
<out>-1</out>
</marker>
</xsl:for-each>
</xsl:template>
但它不起作用(我甚至不完全确定如何实现它)。任何帮助将不胜感激!
答案 0 :(得分:1)
我已经完成了您的样本数据(现在可能它与您的完全匹配?):
<?xml version="1.0" encoding="utf-8"?>
<captionate>
<markers>
<marker time="27">
<label>Introduction</label>
</marker>
</markers>
</captionate>
以下是代码,只有最小的更改(显示除法):
<?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="captionate/markers/marker">
<marker>
<name><xsl:value-of select="label"/></name>
<comment> <CHAPTER>
</comment>
<color>
<alpha>0</alpha>
<red>127</red>
<green>0</green>
<blue>255</blue>
</color>
<in><xsl:value-of select="@time div 33.33"/></in>
<out>-1</out>
</marker>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
通过xsltproc运行此命令可获得预期结果。