繁体   English   中英

用条件语句替换XSL中的文本

[英]Replace text in XSL with conditional statements

我正在使用由数码摄像机生成的XML文件。 摄像机允许用户将摄像机的所有设置保存到SD卡中,以便可以调出设置或将设置加载到另一台摄像机中。 我正在编写的XSL样式表将允许用户查看相机的设置,该设置已保存到Web浏览器中的SD卡中。

虽然XML文件中的大多数值(按我的样式表设置的格式)对人类都是有意义的,但有些则没有意义。 我想做的是让样式表显示基于XML文件中的值的文本,但人类更容易理解。

我的示例XML文件可以在这里查看: http : //josephthomas.info/Alexa/Setup_120511_140322.xml

在页面下方几行中,您将看到:

Color GAMMA-SxS    Rec_Log

尽管“ Rec_Log”是摄像机可以理解的值,但它不是摄像机用户可以理解的值。 我想要样式表执行的是改为显示“ LogC”。

因此,在XML文件中定义了该值:

<DteLut lowerLimit="0" upperLimit="2">Rec_Log</DteLut>

对该示例页面进行格式化的XSL格式为:

<tr>
  <td class="title_column">Color GAMMA-SxS</td><td><xsl:value-of select="Settings/Groups/Recording/DteLut"/>
  </td>
</tr>

因此,我希望做的是在页面上显示“ LogC”,而不是Rec_Log。

在我看来,“何时”条件语句是正确的方法,但是我对导致这种情况发生的语法不甚了解。 XML文件中还有其他值需要替换,但是以上是我的使命的一个很好的例子。

您可以做的就是利用模板匹配,将异常与您要更改的内容进行匹配。 首先,将以下模板添加到您的XSL中

<xsl:template match="DteLut[. = 'Rec_Log']">
   <xsl:text>LogC</xsl:text>
</xsl:template>

然后,而不是下面的行

<xsl:value-of select="Settings/Groups/Recording/DteLut"/>

执行以下行

<xsl:apply-templates select="Settings/Groups/Recording/DteLut"/>

当* DteLut *的值为“ Rec_Log”时,自定义模板将与输出“ LogC”匹配。 如果没有匹配项,则将执行默认行为,即仅按原样输出文本值。

我将使用数据驱动的方法。 有一个提供所有翻译的映射文件:

<translations>
  <translate from="Rec_log" to="LogC"/>
  <translate .../>
</translations>

然后定义一个键:

<xsl:key name="trans" match="translate" use="@from"/>

然后改变

<xsl:value-of select="Settings/Groups/Recording/DteLut"/>

<xsl:value-of select="key('trans', Settings/Groups/Recording/DteLut,
                          doc('translations.xml'))/@to"/>

如果使用XSLT 2.0,或者

<xsl:variable name="val" select="Settings/Groups/Recording/DteLut"/>
<xsl:for-each select="document('translations.xml')">
  <xsl:value-of select="key('trans', $val)/@to"/>
</xsl:for-each>

如果您坚持使用1.0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM