XSLT模板连接字符串/如何停止

时间:2017-01-16 17:01:07

标签: xml xslt

我有一个连接模板变量的XSLT样式表。我无法弄清楚如何阻止它这样做,但也保留单一变量 我已经粘贴了下面的代码和转换...您可以看到02/01/2017变量值 <xsl:variable name="VPlan" select="wd:DEP_VISION_planname/wd:ID[@wd:type = 'Health_Care_Coverage_Plan_ID']"/> <xsl:variable name="MPlan" select="wd:DEPMEDPLAN/wd:ID[@wd:type = 'Health_Care_Coverage_Plan_ID']"/> <xsl:variable name="DPlan" select="wd:DEPDENT_PLAN/wd:ID[@wd:type = 'Health_Care_Coverage_Plan_ID']"/> <xsl:if test="$VPlan = 'HEALTH_CARE_COVERAGE_PLAN-Vision - United Health Care'"> <xsl:call-template name="Depplan"> <xsl:with-param name="Deplan" select="'UHC Vision'"/> <xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/> </xsl:call-template> </xsl:if> <xsl:if test="$DPlan = 'HEALTH_CARE_COVERAGE_PLAN-Dental - MetLife Enhanced'"> <xsl:call-template name="Depplan"> <xsl:with-param name="Deplan" select="'Metlife Dental ASO Enhanced'"/> <xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/> </xsl:call-template> </xsl:if> <xsl:if test="$DPlan = 'HEALTH_CARE_COVERAGE_PLAN-Dental - MetLife Basic'"> <xsl:call-template name="Depplan"> <xsl:with-param name="Deplan" select="'Metlife Dental ASO Basic'"/> <xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/> </xsl:call-template> </xsl:if> <xsl:if test="$MPlan = 'HEALTH_CARE_COVERAGE_PLAN-Medical - Medical Mutual of Ohio PPO SuperMed Plus'"> <xsl:call-template name="Depplan"> <xsl:with-param name="Deplan" select="'Medical Mutual Medical MMO PPO'"/> <xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/> </xsl:call-template> </xsl:if> <xsl:if test="$MPlan = 'HEALTH_CARE_COVERAGE_PLAN-Medical - AETNA PPO Network/Non Network'"> <xsl:call-template name="Depplan"> <xsl:with-param name="Deplan" select="'Aetna Medical PPO'"/> <xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/> </xsl:call-template> </xsl:if> <xsl:if test="$MPlan = 'HEALTH_CARE_COVERAGE_PLAN-Medical - HealthSpan HMO Network Only'"> <xsl:call-template name="Depplan"> <xsl:with-param name="Deplan" select="'HealthSpan Medical HMO'"/> <xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="Depplan"> <xsl:param name="Deplan"/> <xsl:param name="Startdt"/> <xsl:text>[QBDEPENDENTPLAN]</xsl:text> <xsl:call-template name="insertDelimiter"/> <xsl:value-of select="$Deplan"/> <xsl:call-template name="insertDelimiter"/> <!-- <xsl:call-template name="FormatDateValue"> <xsl:with-param name="dateString"> <xsl:value-of select="$Startdt"/> </xsl:with-param> </xsl:call-template> --> <xsl:value-of select="$Startdt"/> <xsl:call-template name="insertDelimiter"/> <xsl:call-template name="insertDelimiter"/> <xsl:text>T</xsl:text> <xsl:call-template name="insertNewLine"/> </xsl:template> 被连接起来重复三次。

代码

#ifndef _LINUX_LIMITS_H

输出

  

[QBDEPENDENTPLAN],UHC Vision,02/01/2017 02/01/2017 02/01/2017,,T
  [QBDEPENDENTPLAN],Metlife Dental ASO增强,02/01/2017 02/01/2017 02/01/2017,,T
  [QBDEPENDENTPLAN],Aetna Medical PPO,02/01/2017 02/01/2017 02/01/2017 ,, T

1 个答案:

答案 0 :(得分:0)

打印3次的日期是<xsl:value-of select="$Startdt"/>命令的结果。

它的价值来自

<xsl:with-param name="Startdt" select="../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date"/>

我认为XPath在这里使用(../wd:COBRA_Records_within_Range/wd:COBRA_Eligible_Date):

  • 找到了3条记录(来自wd:COBRA_Records_within_Range),
  • 每个记录中打印日期(wd:COBRA_Eligible_Date)。

可能的解决方案之一是仅从找到的第一条记录打印日期:

../wd:COBRA_Records_within_Range[1]/wd:COBRA_Eligible_Date

如果您可以保证所有这些日期(来自所有记录)都相同,则无需进一步考虑。

但如果这些日期有所不同呢? 你必须自己考虑这个。