【发布时间】:2014-06-04 14:28:48
【问题描述】:
我有一个带有节点名字的源架构(包含名字 + ' ' + 中间名),我需要在目标架构中分离出中间名,以便将其发送给 OtherNames。
我目前有以下 xslt 模板:
<xsl:template name="StringSplit">
<xsl:param name="valFirstnames" />
<xsl:choose>
<xsl:when test="contains($valFirstnames, ' ')">
<xsl:call-template name="StringSplit">
<xsl:with-param name="valFirstnames" select="substring-after($valFirstnames, ' ')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<OtherFirstNames><xsl:value-of select="$valFirstnames" /></OtherFirstNames>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
此 xslt 模板的当前输出是两次而不是一次写出中间名:
<OtherFirstName>Middlename</OtherFirstName>
<OtherFirstName>Middlename</OtherFirstName>
预期:
<OtherFirstName>Middlename</OtherFirstName>
示例输入
<Data>
<SubjectName>
<forenames>first middle</forenames>
</SubjectName>
<SubjectPartner>
<forenames>first middle</forenames>
<Otherforenames>first middle</Otherforenames>
</SubjectPartner>
<etc./>
</Data>
样本输出
<Data>
<SubjectName>
<firstname>first</firstname>
<OtherFirstName>middle</OtherFirstname>
</SubjectName>
<SubjectPartner>
<firstname>first</firstname>
<OtherFirstName>middle</OtherFirstName>
<OtherFirstName>middle</OtherFirstName>
</SubjectPartner>
<etc./>
</Data>
我正在考虑更正当前的 xslt 并更新以合并具有相同子元素名的其他合作伙伴元素。
【问题讨论】:
-
你确定那些输入/输出样本是正确的吗?
-
这一定是Xslt吗?您最好在 C# 中使用 Script Functoid 或 Extension Method 进行字符串操作。
-
"此 xslt 模板的当前输出是两次而不是一次写出中间名" 不,我认为它不会那样做。发布一个完整的代码示例,以便我们可以尝试重现您的结果。
-
@boatseller 没有特别的原因,但是由于地图使用了它,我认为在 xslt 中实现它会很好,因为我相信它可以这样做。
-
@michael.hor257k 感谢您的 cmets,如果没有中间名(名字),问题似乎重复了名字元素,但如果有名字和中间名,xslt 似乎可以工作。 otherforename 节点是否对您造成了问题?
标签: xslt biztalk biztalk2006r2 biztalk-mapper