1

我有一个 XSL 文件,我在其中创建了一个像这样的字段:

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

'Yrs,'-',Mos,'-',Days,'-',Hrs 的值,我从 Web 服务响应接收并直接将其分配给 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 文件上执行此操作?

4

2 回答 2

0

XSLT 2.0:

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

请参阅链接以获取工作示例

于 2013-03-22T20:55:08.783 回答
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、M​​os、Days 从右到左)。

如果违反了这个假设,就无法理解缺少的部分2013-10-8什么——是几个月还是几天?

于 2013-03-22T22:03:04.630 回答