Xquery连接名称(如果可用)

时间:2016-11-10 10:00:25

标签: xslt concatenation xquery

我们有一个带有姓名字段的传入消息,如下所示,其中" 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,

2 个答案:

答案 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时才添加逗号。