首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用xsl:if实现类似于SQL的功能吗?

我能用xsl:if实现类似于SQL的功能吗?
EN

Stack Overflow用户
提问于 2022-06-13 13:36:43
回答 1查看 30关注 0票数 1

我有一个能够工作的XSL IF语句,我可能会通过编写多个XSL IF语句来实现我所需要的,但我想问是否有一种方法可以使用XSL if来做类似于SQL功能的事情。

在我的数据中,字段sce_moac.sce.srs可能是大约20个数值之一。我想使用XSL将这20个值转换为XML中保存的三个值之一(crs_udf5.crs.srscrs_udf6.crs.srscrs_udf7.crs.srs)。

XML

代码语言:javascript
复制
<exchange>
 <sce>
  <sce.srs>
   <sce_scjc.sce.srs>560021325/2</sce_scjc.sce.srs>
   <sce_seq2.sce.srs>06</sce_seq2.sce.srs>
   <sce_moac.sce.srs>01</sce_moac.sce.srs>
  <crs>
    <crs.srs>
     <crs_udf5.crs.srs>114</crs_udf5.crs.srs>
     <crs_udf6.crs.srs>115</crs_udf6.crs.srs>
     <crs_udf7.crs.srs>118</crs_udf7.crs.srs>
    </crs.srs>
   </crs>
  </sce.srs>
 </sce>
</exchange>

XSL

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" media-type="text/x-json"/>
 <xsl:template match="/">  
<xsl:apply-templates />
</xsl:template>  
  
<xsl:template match="/">    
 <xsl:text>[</xsl:text> 
<xsl:for-each select="/exchange/sce/sce.srs/sce_seq2.sce.srs">
<xsl:text> {PATRONCODE":"</xsl:text>
    <xsl:if test="..//sce_moac.sce.srs=01">
      <xsl:value-of select="../../..//crs_udf5.crs.srs"/>
    </xsl:if>
<xsl:text>"</xsl:text>
<xsl:text>}</xsl:text>  
<xsl:if test="position() != last()">,</xsl:if>          
 </xsl:for-each>
 <xsl:text>]</xsl:text>   
</xsl:template>
</xsl:stylesheet>

我想要做的是有一个值列表,而不是xsl中的一个值:如果测试是这样而不是<xsl:if test="..//sce_moac.sce.srs=01">,那么我将有一个布尔OR,所以更像这个<xsl:if test="..//sce_moac.sce.srs=01|02|43">,但是这个语法是无效的。有办法这样做吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-13 14:04:34

XPath/XSLT2.0(及以上)

可以指定要对其进行测试的值序列:

代码语言:javascript
复制
<xsl:if test="..//sce_moac.sce.srs=('01','02','43')">

XPath/XSLT1.0

通常会将值分解为单独的逻辑或条件:

代码语言:javascript
复制
<xsl:if test="..//sce_moac.sce.srs='01' or 
              ..//sce_moac.sce.srs='02' or
              ..//sce_moac.sce.srs='43')">

请注意,在应用上述模式时,您可能希望在变量中捕获LHS,而不是重复XPath。

Dimitre还有一个clever trick (+1),如果您必须使用XSLT1.0,您可能希望在这里应用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72603816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档