使用XSLT重新格式化数据集

时间:2011-05-18 19:36:39

标签: xml xslt

所以我之前从未使用过XSLT,所以这可能是一个非常简单的问题。基本上,我的工作是章节视频,我们使用的程序生成一个XML文档,其中包含成对的时间码(章节开始,以毫秒为单位)和标题(章节的名称)。我想要做的是将其重新排列为Final Cut Pro理解的格式。

程序以下列格式生成数据:

<marker time="27">
<label>Introduction</label>
</marker>

和Final Cut需要这种格式(时间码转换为帧,又称为33.3):

<marker>
    <name>Introduction</name>
    <comment> &lt;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> &lt;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>

但它不起作用(我甚至不完全确定如何实现它)。任何帮助将不胜感激!

1 个答案:

答案 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> &lt;CHAPTER&gt;
    </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运行此命令可获得预期结果。