2014-10-27 2 views
0

Я пытаюсь выбрать, какое преобразование будет применяться на основе его значения. Если тест является высоким, разрешение будет удалено, оставив только HD, но если тест является стандартным, только SD будет установленным значением.Выберите и переведите значение тега

Источник XML

<?xml version="1.0" encoding="UTF-8"?> 
    <file_information> 
     <asset_data> 
     <upn>FF074172</upn> 
     <title>test</title> 
     <version>High Definition</version> 
     <duration>00:30</duration> 
     <tc_in>23:00:00:00</tc_in> 
     <tc_out>23:00:30:00</tc_out> 
     <aspect_ratio>16X9</aspect_ratio> 
     <segment> 
      <sequence>1</sequence> 
      <tc_in>23:00:00:00</tc_in> 
      <tc_out>23:00:30:00</tc_out> 
      <comment></comment> 

     </segment> 
     </asset_data> 
    </file_information> 

Transform

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
     <xsl:template match="/"> 
     <file_information> 
      <asset_data> 
      <upn> 
      <xsl:value-of select="//upn"/> 
      </upn> 
      <title> 
      <xsl:value-of select="//title"/> 
      </title> 
      <xsl:choose> 
      <xsl:when test="High Definition"> 
      <version> 
      <xsl:value-of select="translate(//version,'igh efinition','')"/> 
      </version> 
      </xsl:when> 
      <xsl:otherwise> 
      <version> 
      <xsl:value-of select="translate(//version,'tandard','D',)"/> 
      </version> 
      </xsl:otherwise> 
      </xsl:choose> 
      <duration> 
      <xsl:value-of select="//duration"/> 
      </duration> 
      <tc_in> 
      <xsl:value-of select="//tc_in"/> 
      </tc_in> 
      <tc_out> 
      <xsl:value-of select="//tc_out"/> 
      </tc_out> 
      <aspect_ratio> 
     <xsl:value-of select="translate(//aspect_ratio,'X',':')"/> 
    </aspect_ratio> 
    </asset_data> 
</file_information> 

Ожидаемый результат

<?xml version="1.0" encoding="UTF-8"?> 
    <file_information> 
     <asset_data> 
     <upn>FF074172</upn> 
     <title>test</title> 
     <version>HD</version> 
     <duration>00:30</duration> 
     <tc_in>23:00:00:00</tc_in> 
     <tc_out>23:00:30:00</tc_out> 
     <aspect_ratio>16:9</aspect_ratio> 
     <segment> 
      <sequence>1</sequence> 
      <tc_in>23:00:00:00</tc_in> 
      <tc_out>23:00:30:00</tc_out> 
      <comment></comment> 
     </segment> 
     </asset_data> 
    </file_information> 

или

<?xml version="1.0" encoding="UTF-8"?> 
    <file_information> 
     <asset_data> 
     <upn>FF074172</upn> 
     <title>test</title> 
     <version>SD</version> 
     <duration>00:30</duration> 
     <tc_in>23:00:00:00</tc_in> 
     <tc_out>23:00:30:00</tc_out> 
     <aspect_ratio>16:9</aspect_ratio> 
     <segment> 
      <sequence>1</sequence> 
      <tc_in>23:00:00:00</tc_in> 
      <tc_out>23:00:30:00</tc_out> 
      <comment></comment> 
     </segment> 
     </asset_data> 
    </file_information> 

Вы знаете, что происходит не так? Thanks

ответ

0

спасибо, ребята! это решить мою проблему (= вместо эк, переводить вместо замены):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="@*|node()"><!--Identity template--> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="version"> 
     <xsl:choose> 
     <xsl:when test=". = 'High Definition'"> 
      <version><xsl:value-of select="'HD'"/></version> 
     </xsl:when> 
     <xsl:otherwise> 
      <version><xsl:value-of select="'SD'"/></version> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

    <xsl:template match="aspect_ratio"> 
     <xsl:element name="{name()}"> 
     <xsl:value-of select="translate(., 'X', ':')"/> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 
0

Попробуйте следующее: здесь я использовал шаблон IDENTITY, который приведет к выводам всех узлов для вывода, тогда я использовал выборочное соответствие, например. элементы 'version' и 'aspect_ratio'.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="@*|node()"><!--Identity template--> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="version"> 
     <xsl:choose> 
     <xsl:when test=". eq 'High Definition'"> 
      <version><xsl:value-of select="'HD'"/></version> 
     </xsl:when> 
     <xsl:otherwise> 
      <version><xsl:value-of select="'SD'"/></version> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

    <xsl:template match="aspect_ratio"> 
     <xsl:element name="{name()}"> 
     <xsl:value-of select="replace(., 'X', ':')"/> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Как это, это является XSLT 2.0 ответ (даже если версия установлена ​​на 1.0). –

+0

Измените на и to (запятая после удаления D) –

Смежные вопросы