Переформатирование набора данных с использованием XSLT - PullRequest
1 голос
/ 18 мая 2011

Так что я никогда раньше не использовал 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 Ответ

1 голос
/ 19 мая 2011

Я заполнил ваши образцы данных (возможно, теперь они точно совпадают с вашими?):

<?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 дает ожидаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...