我正在尝试为与查询匹配的每个元素的特定属性(例如@root)计算每个值的出现次数。这些匹配元素中的一些不具有该属性,但我也想对它们进行计数(即,还列出不具有该属性的匹配元素的数量)
当前,我使用此属性,但这与不具有root
属性的节点不匹配。计数由应用程序完成,这使我可以显示中间结果。
//node[@rel='su']/@root
我想要类似的东西
//node[@rel='su']/string(if .[@root] then @root else 'fallback-value')
查询是针对Berkeley DB XML运行的,因此也可以使用XPath2和XQuery来解决此问题。
编辑:为澄清起见,我正在寻找一个查询,该查询将@root属性的不存在视为特例;即好像属性确实存在并且具有“后备值”作为值。
最佳答案
试试这个:
//node[@rel='su']/(@root/string(), 'no-value')[1]
遵循最初被误解的答案
你为什么不只用
//node[@rel='su']
然后?它将匹配具有
node
属性的@root
元素和不具有node
属性的元素。假设一个
@root
最多可以具有一个关于xpath - 如果属性不存在,如何选择属性或后备值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917299/