我们有一个带有姓名字段的传入消息,如下所示,其中" GivenName"字段是无限的:
<Name>
<Surname>LOUIS</Surname>
<GivenName>John</GivenName>
<GivenName>Andy</GivenName>
</Name>
我们需要将消息传递给其他终端系统:
<Name>
<FullName>LOUIS, John Andy</FullName>
</Name>
因此,如果输入中不存在GivenName字段,则转换应生成:
<Name>
<FullName>LOUIS</FullName>
</Name>
如果输入中存在multipe GivenName,它应该通过与空格分隔来连接所有。
我尝试使用连接函数,但它没有给出所需的结果。 我尝试使用:
<ns1:FullName>{ fn:concat($SubmittedBy/ns1:Name/ns1:Surname,", ", (for $GivenName in $SubmittedBy/ns1:Name/ns1:GivenName return fn:concat(data($GivenName), "")) ) }</ns1:FullName>
但它的产生类似:
<Name>
<FullName>LOUIS, JohnAndy</FullName>
</Name>
如果将GivenName与空格分开,我遇到了麻烦。
有人可以提供任何建议。
TIA,
答案 0 :(得分:2)
fn:concat($str1, $str2, ...)
期望每个参数使用一个字符串,并将所有这些字符串连接成一个字符串。要连接字符串的序列并指定各部分之间的内容,可以使用fn:string-join($strs, $joiner)
:
string-join(('foo', 'bar', 'baz'), '::')
生成字符串foo::bar::baz
。
答案 1 :(得分:0)
感谢Leo,感谢Leo,我使用了以下代码,只有当它以空格分隔时才会添加GivenName。
{ fn:string-join((fn:concat($Name/ns1:Surname,","),$Name/ns1:GivenName), ' ')}
我需要一个逗号&#39;在Surname之后,所以我不得不对它进行硬编码,所以如果没有GivenName存在,它会给Surname一个逗号&#34; LOUIS,&#34; 所以输出如下,根据请求中GivenName的可用性:
<FullName>LOUIS,</FullName>
<FullName>LOUIS, John</FullName>
<FullName>LOUIS, John Andy</FullName>
理想情况是仅在存在GivenName时才添加逗号。