2015-10-02 3 views
0

EDIT для включения дополнительной информации.Использование «value-of-select» для выбора второго атрибута

Я использую Telestream Vantage для преобразования XML в то, что Telestream называют меткой метаданных.

Простая методика заключается в следующем:

  1. Создайте свой Ярлык набор метаданных в консоли Vantage управления
  2. Экспорт Метку набор метаданных как XML
  3. Из XML создать XSL, который будет «полоса 'из предоставленного XML и заполнить поля набора меток.

У меня есть XML, генерируемый FFProbe, который выглядит следующим образом:

<?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> 

И я пытаюсь экстракт атрибут «каналы» из каждой строки, используя следующее заявление (s):

 <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> 

Как вы можете видеть, это раздел «Значение выбора», на который я смотрю. Для каждого последующего блока я увеличить «поток» ссылка:

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

Затем я запустить Vantage рабочего процесс, который принимает XML-файл в качестве вложения, а затем применяет «Transform» с использованием таблицы стилей и метки целевых метаданных Задавать.

Где я просматриваю набор меток метаданных, все мои значения равны 0, а не 1 в соответствии с импортированным XML-файлом. Мои навыки XSL крайне отсутствуют, но любая помощь будет очень признательна.

+0

"* похоже, что не работает *" не является хорошим описанием проблемы. Пожалуйста, разместите достаточно кода, чтобы мы могли воспроизвести проблему, и покажем нам ожидаемый результат - P.S. Вам нужно узнать (по крайней мере) о инструкции 'xsl: for-each'. –

+0

Извинения Майкл, я обновил исходное сообщение, чтобы добавить дополнительную информацию. Я не знаю, могу ли я использовать инструкцию xsl: for-each, учитывая, что мне нужно сопоставить каждое извлеченное значение с определенным параметром в моем Vantage XSL. По крайней мере, выглядит ли конструкция моего xsl: value-of-select? –

ответ

0

Проходя через W3C учебники, а некоторые из проб и ошибок, следующий оператор работал:

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

Я также изменил командную строку ffprobe:

-print_format xml=fully_qualified=1 

Что изменило xml, которое ffprobe выводит на:

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

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

Попробуйте следующие операторы Xsl

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

Dcoto

+0

Dcoto

+0

Не забудьте закрыть для каждого – Dcoto