我需要帮助解决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>
答案 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>
结尾。)所以我修复了它。
然后,我发现您的查询没有产生任何结果,因为它正在寻找root
和attributes
之间的元素(&#39; *&#39;),而不是&# 39; t存在于文件中。所以我将/*/
更改为/
。
那时,我得到了ENtity1_Value, ENtity2_Value, ENtity3_Value,
的结果。那么谁知道ChildValue1, ChildValue2,
来自何处。可能您的真实查询中包含//
。
(当你在StackOverflow上提问时,你应该确保你的例子的行为如上所述。)