2013-03-22 6 views
1

У меня есть XSL-файл, в котором я создаю поле, как это:Фильтрация данных с помощью XSLT

<ServiceText> 
<xsl:value-of select="concat(Yrs,'-',Mos,'-',Days,'-',Hrs)" /> 
</ServiceText> 

Значения 'Yrs,' -», Мос, '-', дни, '-' , Hrs, я получаю от ответа веб-службы и сразу же передаю его в XSL. Я не могу вносить какие-либо изменения в данные в коде для этих полей, потому что именно так работает ocde. Все манипуляции с данными находятся на xslt.

Я хочу сделать фильтрацию данных на XSLT следующим образом:

if value of yrs =-1 then yrs="" 
if value of mos =-1 then mos="" 
if value of Days =-1 then Days="" 
if value of Hrs =-1 then Hrs="" 

Как я могу сделать это на файл XSL?

+0

Вы все еще хотите вывести hypens, если любое из значений -1? –

+0

XSLT 1.0 или 2.0? –

+0

Да, я хочу, чтобы значения «-» были равны -1. Я использую xslt 1.0. Ответ ниже для меня не работает. – user2200617

ответ

0

XSLT 2.0:

<xsl:template match="/root"> 
    <ServiceText> 
     <xsl:value-of select="string-join((Yrs, Mos, Days, Hrs)[.!=-1],'-')" /> 
    </ServiceText> 
</xsl:template> 

См ссылку на Working example

0

В XSLT 1.0 используйте что-то вроде этого:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*/*[not(.= -1)]"> 
    <xsl:value-of select="concat(., substring('-', 2 - not(self::Hrs)))"/> 
</xsl:template> 
<xsl:template match="*/*[. = -1]"/> 
</xsl:stylesheet> 

Когда это преобразование применяется на следующий XML документ:

<t> 
<Yrs>-1</Yrs> 
<Mos>7</Mos> 
<Days>15</Days> 
<Hrs>3</Hrs> 
</t> 

разыскиваемый результат получается:

7-15-3 

ли Примечание:

Кажется, что есть предположение, что "-1" значения образуют непрерывную группу (справа слева в последовательности Yrs, Mos, Days).

Если это допущение нарушено, было бы невозможно понять, что является недостающей частью в 2013-10-8 - это месяцы или дни?

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