使用"选择值"选择第二个属性

时间:2015-10-02 10:33:55

标签: xml xslt ffprobe

编辑以包含其他信息。

我使用Telestream Vantage将XML转换为Telestream称为元数据标签的内容。

简单的方法如下:

  1. 在Vantage Management Console中构建元数据标签集
  2. 将元数据标签集导出为XML
  3. 从XML创建一个XSL,它将剥离'来自提供的XML的值并填充标签集的字段。
  4. 我有一个由FFProbe生成的xml,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <ffprobe:ffprobe xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ffprobe='http://www.ffmpeg.org/schema/ffprobe' xsi:schemaLocation='http://www.ffmpeg.org/schema/ffprobe ffprobe.xsd'>
    <programs>
    </programs>
    
    <streams>
        <stream index="1" channels="1"/>
        <stream index="2" channels="1"/>
        <stream index="3" channels="1"/>
        <stream index="4" channels="1"/>
        <stream index="5" channels="1"/>
        <stream index="6" channels="1"/>
        <stream index="7" channels="1"/>
        <stream index="8" channels="1"/>
        <stream index="9" channels="1"/>
        <stream index="10" channels="1"/>
        <stream index="11" channels="1"/>
        <stream index="12" channels="1"/>
        <stream index="13" channels="1"/>
        <stream index="14" channels="1"/>
        <stream index="15" channels="1"/>
        <stream index="16" channels="1"/>
        <stream index="17" channels="1"/>
        <stream index="18" channels="1"/>
        <stream index="19" channels="1"/>
        <stream index="20" channels="1"/>
        <stream index="21" channels="1"/>
        <stream index="22" channels="1"/>
        <stream index="23" channels="1"/>
        <stream index="24" channels="1"/>
        <stream index="25" channels="1"/>
        <stream index="26" channels="1"/>
        <stream index="27" channels="1"/>
        <stream index="28" channels="1"/>
        <stream index="29" channels="1"/>
        <stream index="30" channels="1"/>
        <stream index="31" channels="1"/>
        <stream index="32" channels="1"/>
        <stream index="33" channels="1"/>
        <stream index="34" channels="1"/>
        <stream index="35" channels="1"/>
        <stream index="36" channels="1"/>
        <stream index="37" channels="1"/>
        <stream index="38" channels="1"/>
        <stream index="39" channels="1"/>
        <stream index="40" channels="1"/>
    </streams>
    

    我正在尝试提取频道&#39;使用以下语句从每一行中获取属性:

            <soa:Parameter type="int32" identifier="0c000188-c401-4b99-91dc-8e15ebcb7981" bindable="True" name="Stream 01" enabled="true" disableable="false" optionseditable="false" row="-1" column="-1" columnspan="1">
                <xsl:value-of select="default:ffprobe/default:streams[1]/default:stream[1]/@channels"/>
            </soa:Parameter>
    

    正如您所看到的,它是&#34;选择的价值&#34;我正在看的部分。对于每个后续块我都会增加&#39;流&#39;参考:

    <xsl:value-of select="default:ffprobe/default:streams[1]/default:stream[n]/@channels"/>
    

    然后我运行一个Vantage工作流,它将XML文件作为附件,然后应用&#34;转换&#34;使用样式表和目标元数据标签集。

    在我查看元数据标签集的情况下,根据导入的XML文件,我的所有值都是0,而不是1。我的XSL技能非常缺乏,但我们非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

通过W3C教程和一些试验和错误,以下声明有效:

<xsl:value-of select="ffprobe/streams/stream[n]/@channels" />

我还更改了ffprobe命令字符串:

-print_format xml=fully_qualified=1

这改变了ffprobe输出的xml:

<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
    <programs>
    </programs>

    <streams>
        <stream index="1" channels="2"/>
        <stream index="2" channels="4"/>
        ...
    </streams>
</ffprobe>

答案 1 :(得分:-1)

尝试以下xsl语句

<xsl:for-each select="/streams/stream">
<xsl:value-of select="/streams/stream/@channels"/>
</xsl:for-each>