Xquery concat(fn:data(value),';,';)连接*所有*字符串,而不仅仅是值

Xquery concat(fn:data(value),';,';)连接*所有*字符串,而不仅仅是值,xquery,Xquery,我需要帮助解决Xquery的问题 我使用下面的Xquery来获取属性的“值”。但是,有一个属性“Email”具有更多的子属性。通过下面的Xquery,我得到了所有“值”的数据 即truetruebc@hghh.gff, truetruexyn@qwe.com, 39919741 但我只需要“abc@hghh.gff $# xyn@qwe.com,39919741“在我的输出中 {/root/*/attributes/* [ov='true']/fn:concat(fn:data(value),'

我需要帮助解决Xquery的问题

我使用下面的Xquery来获取属性的“值”。但是,有一个属性“Email”具有更多的子属性。通过下面的Xquery,我得到了所有“值”的数据 即truetruebc@hghh.gff, truetruexyn@qwe.com, 39919741 但我只需要“abc@hghh.gff $# xyn@qwe.com,39919741“在我的输出中

{/root/*/attributes/* [ov='true']/fn:concat(fn:data(value),',')}



   <root>
   <_1>
      <attributes>
         <Email>
            <ov>true</ov>
            <value>
               <Email>
                  <ov>true</ov>
                 <value>abc@hghh.gff</value>
               </Email>
            </value>
         </Email>
         <Email>
            <ov>true</ov>
            <value>
               <Email>
                  <ov>true</ov>
                  <value>xyn@qwe.com</value>
               </Email>
            </value>
         </Email>
         <UniqueId>
            <ov>true</ov>
            <value>39919741</value>
         </UniqueId>
      </attributes>
   </_1>
</root>
{/root/*/attributes/*[ov='true']/fn:concat(fn:data(value),','))
真的
真的
abc@hghh.gff
真的
真的
xyn@qwe.com
真的
39919741
试试:

尝试:


您的XML文档格式不正确。(XML元素名称区分大小写,因此不能以
开头,不能以
结尾。)因此我修复了这个问题

然后,我发现您的查询没有产生任何结果,因为它正在查找
属性
之间的元素(“*”),而该元素在文档中不存在。所以我把
/*/
改成了
/

此时,我得到了
ENtity1\u值、ENtity2\u值、ENtity3\u值的结果,
。所以谁知道
ChildValue1,ChildValue2,
从哪里来。可能您真正的查询中有一个
/


(当您询问有关StackOverflow的问题时,应确保您的示例的行为符合所述。)

您的XML文档格式不正确。(XML元素名称区分大小写,因此不能以
开头,不能以
结尾。)因此我修复了这个问题

然后,我发现您的查询没有产生任何结果,因为它正在查找
属性
之间的元素(“*”),而该元素在文档中不存在。所以我把
/*/
改成了
/

此时,我得到了
ENtity1\u值、ENtity2\u值、ENtity3\u值的结果,
。所以谁知道
ChildValue1,ChildValue2,
从哪里来。可能您真正的查询中有一个
/


(当你问一个关于StackOverflow的问题时,你应该确保你的例子的行为与前面描述的一样。)

我想你应该把那些没有任何子元素的
value
子元素连接起来,这样你就可以使用例如
字符串连接(/root/*/attributes/*[ov='true']//value[not(*),',')


在XQuery 3.1中,您还可以将函数与例如
字符串连接(最内层(/root/*/attributes/*[ov='true']///value),,')一起使用
我认为您希望将那些没有任何子元素的
子元素串联起来,以便可以使用例如
字符串连接(/root/*/attributes/*[ov='true']//值[非(*)],',')


在XQuery 3.1中,您还可以将函数与字符串联接(最内层(/root/*/attributes/*[ov='true']///value),,')一起使用。

问题的标题应反映所问的特定技术问题,并使其与其他问题区别开来(因此,拥有自己的xquery问题的人可以从标题中判断您的问题是否与同一个问题有关,从而判断您的问题的答案是否可能对他们有所帮助)——不是你需要答案的性质或紧迫性……坦率地说,这个问题很难理解——例如,它指的是
Entity1\u Value
ChildValue1
,等等,但你的示例数据没有这些。请参阅帮助中心关于构建一个实例的指南,以说明你的问题,以便其他人能够重现。你说期望的输出包括“$#”。这应该来自哪里?一个问题的标题应该以一种区别于其他问题的方式反映所问的特定技术问题(因此,拥有自己的xquery问题的人可以从标题中判断您的问题是否与同一个问题有关,从而判断您的问题的答案是否可能对他们有所帮助)——不是你需要答案的性质或紧迫性……坦率地说,这个问题很难理解——例如,它指的是
Entity1\u Value
ChildValue1
,等等,但你的示例数据没有这些。请参阅帮助中心关于构建一个实例的指南,以说明你的问题,以便其他人能够重现。你说所需的输出包括“$#”.这应该是从哪里来的?我已经更新了xml记录,希望它现在是准确的。有了这个记录,我需要输出为:abc@hghh.gff, xyn@qwe.com,39919741我已经更新了xml记录,希望它现在是准确的。有了此记录,我需要输出为:abc@hghh.gff, xyn@qwe.com,39919741感谢您提供答案,它现在正在工作。你知道在我需要输出时的查询吗": abc@hghh.gff $# xyn@qwe.com,39919741一旦得到解决了上一个问题描述的答案,编辑问题以更改所需结果是没有意义的。如果有新问题,请提出新问题,即使它与上一个问题相关。并解释数据或格式(如“$#”)的位置来自于写新问题时。感谢您提供答案,它现在正在工作。您知道该查询以防我需要类似的输出吗": abc@hghh.gff $# xyn@qwe.com,39919741一旦得到解决了上一个问题描述的答案,编辑问题以更改所需结果是没有意义的。如果有新问题,请提出新问题,即使它与上一个问题相关。并解释数据或格式(如“$#”)的位置来自编写新问题时。@AnjitSharma可能是因为您在问题中放置了不同的XML记录,现在您要求从中获得不同的输出。对于新问题
fn:string-join(/root/attributes[ov='true']/*/Value/string(), ",")