concat(fn:data(value),',')连接* all * strings,而不仅仅是value

时间:2018-06-08 08:24:20

标签: 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),',')}



   <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>

3 个答案:

答案 0 :(得分:2)

我认为您想要对那些没有子元素的value后代元素进行连接,以便您可以使用例如string-join(/root/*/attributes/*[ov='true']//value[not(*)], ',')

在XQuery 3.1中,您还可以使用innermost()功能,例如string-join(innermost(/root/*/attributes/*[ov='true']//value), ',')

答案 1 :(得分:0)

尝试:

{{1}}

答案 2 :(得分:0)

您的XML文档格式不正确。 (XML元素名称区分大小写,因此您不能以<Value>开头,以<value>结尾。)所以我修复了它。

然后,我发现您的查询没有产生任何结果,因为它正在寻找rootattributes之间的元素(&#39; *&#39;),而不是&# 39; t存在于文件中。所以我将/*/更改为/

那时,我得到了ENtity1_Value, ENtity2_Value, ENtity3_Value,的结果。那么谁知道ChildValue1, ChildValue2,来自何处。可能您的真实查询中包含//

(当你在StackOverflow上提问时,你应该确保你的例子的行为如上所述。)