You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT1.0(MSXML6)仅当REC_CARB_MRKR节点存在时输出文本块

XSLT 1.0 条件输出模块实现方案

核心逻辑

XSLT 1.0 配合MSXML 6引擎时,可先通过变量筛选出所有带REC_CARB_MRKR子节点的有效LAYER节点,再基于该变量的非空判断决定是否输出整个WELLCURVE模块内容,从根源上避免无有效数据时输出无意义的头尾固定文本。

具体改造步骤

  • 第一步:在输出WELLCURVE模块的位置前置定义筛选变量,直接匹配符合要求的有效节点
    <xsl:variable name="validLayers" select="/NODE1/LAYERS/LAYER[REC_CARB_MRKR]"/>
    
  • 第二步:将原有WELLCURVE模块下的所有内容(头部固定文本、LAYER节点遍历逻辑、尾部固定文本)全部包裹在条件判断块内,XSLT 1.0中节点集非空时会自动判定为布尔真
    <xsl:if test="$validLayers">
      <!-- 这里放WELLCURVE模块的全部原有输出逻辑 -->
    </xsl:if>
    
  • 第三步:优化遍历逻辑,直接遍历提前筛选好的$validLayers变量输出REC数据行,无需在循环内重复判断子节点是否存在,减少冗余计算。

完整参考代码片段

<xsl:template match="/">
  <!-- 其余原有业务逻辑保持不变 -->

  <!-- WELLCURVE模块 增加前置存在性判断 -->
  <xsl:variable name="validCarbMarkerLayers" select="/NODE1/LAYERS/LAYER[REC_CARB_MRKR]"/>
  <xsl:if test="$validCarbMarkerLayers">
    <!-- 输出头部固定文本 -->
    <xsl:text>SOME
TEXT
Options
</xsl:text>
    <!-- 遍历输出有效REC数据行 -->
    <xsl:for-each select="$validCarbMarkerLayers">
      <!-- 替换为你原有输出REC行的具体字段取值逻辑 -->
      <xsl:value-of select="REC_CARB_MRKR"/>
      <xsl:text>&#xA;</xsl:text>
    </xsl:for-each>
    <!-- 输出尾部固定文本 -->
    <xsl:text>END_CURVE
END
</xsl:text>
  </xsl:if>

  <!-- 其余原有业务逻辑保持不变 -->
</xsl:template>

注意事项

路径写法优先使用从根节点出发的绝对路径/NODE1/LAYERS/LAYER[REC_CARB_MRKR],不要使用//LAYER[REC_CARB_MRKR]这类全文档扫描写法,既能避免匹配到文档其他位置的同名节点,也能提升MSXML 6引擎的解析执行效率。

内容的提问来源于stack exchange,提问作者lilaaffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 19:18:26