过滤特定值,但如果不存在则使用默认值

Filter for specific value, but use default value if it doesn't exist

我有一个输入模式,其中包含 phone 个数字的列表,数字类型为 phone,如下所示:

<phoneNumbers>
    <phoneNumber type="work">...</phoneNumber>
    <phoneNumber type="home">...</phoneNumber>
</phoneNumbers>

我只想映射特定类型的数字,比方说 'work'。如果 'work' 类型 phone 号码不可用,我需要填写默认值。

这是我的开头:

我 运行 遇到的问题是,如果没有 'work' phone 数字,我无法让默认值出现在输出中。

使用脚本 functoid 怎么样?

public string setphonenumber(string work_number)
{
  string default = "123456789";
  if(work_number ="")
      return default;
  else return work_number;

}

如果 phone# 有固定长度,您可以将右侧的默认值字符串连接起来,然后输入到左侧的字符串。

我建议您使用不等于 functoid 来设置您的默认值,如果它不同于 "Work",如果它等于 "work",您将在输出

您可以使用内联 XSLT 脚本函数。

假设源结构和目标结构如下所示:

内联 XSLT 应该是这样的:

<workNumber xmlns:p="http://PhoneNumberMap.SourceSchema">
  <xsl:variable name="var:v1" select="/p:Root/phoneNumbers/phoneNumber[@type='work']" />
  <xsl:choose>
    <xsl:when test="$var:v1!=''">
      <xsl:value-of select="$var:v1" />
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="'some default'" />
    </xsl:otherwise>
  </xsl:choose>
</workNumber>

尝试在 xlst 中制作完整的地图,而不是使用 BizTalk 地图 functoid。一开始您会为 xslt 而苦恼,但一段时间后,您会爱上它!

我不会在这里 post 整个解决方案,但我发现了一个很好的 Youtube post 解释了一切。 3:00.

变得很有趣