Sterling Map Editor:条件空值下生成空XML标签问题
在IBM Sterling B2B Integrator中生成XML空标签的解决方案
我之前在Sterling B2B Integrator做XML映射时也碰到过一模一样的问题——明明写了空值判断,但就是出不来<my_var/>这种自闭合的空标签。其实核心问题是Sterling的映射引擎默认会忽略值为空的元素,不会主动输出空标签,得用下面几种方法来强制生成:
方法1:用XSL条件语句直接生成空元素
你可以通过xsl:choose或者xsl:if来分别处理空值和非空值的情况,明确指定空元素的输出:
<xsl:choose> <!-- 当变量为空时,直接输出自闭合的空标签 --> <xsl:when test="empty($my_var[counter][1].#my_var)"> <my_var/> </xsl:when> <!-- 变量有值时正常输出带内容的元素 --> <xsl:otherwise> <my_var><xsl:value-of select="$my_var[counter][1].#my_var"/></my_var> </xsl:otherwise> </xsl:choose>
如果偏好分两个xsl:if来写也可以,逻辑是完全一致的。
方法2:通过映射编辑器的元素属性强制输出
这是更简单的可视化操作方法,不用写复杂的XSL:
- 在Sterling的映射编辑器里,找到你要输出的
my_var元素 - 右键点击元素,选择Properties(属性)
- 在弹出的属性面板里,找到类似Generate Empty Element(生成空元素)或者Force Output When Empty(为空时强制输出)的选项,勾选它
- 直接把你的变量绑定到这个元素上,不管变量是否为空,引擎都会输出
<my_var/>或者<my_var></my_var>(如果需要严格的自闭合格式,可以在映射的全局输出设置里调整XML格式选项,开启自闭合空标签的渲染)
为什么原来的表达式没生效?
你之前写的empty($my_var[counter][1].#my_var)只是一个条件判断,但并没有告诉映射引擎“当条件成立时要生成这个空元素”。Sterling的映射逻辑是:如果绑定的变量为空,默认不会渲染这个元素,所以必须通过显式的XSL代码或者配置选项来强制它输出空标签。
内容的提问来源于stack exchange,提问作者Pablo Mosby
相关产品推荐
相关产品推荐

