xpath - 如果属性不存在,如何选择属性或后备值?

标签 xpath

我正在尝试为与查询匹配的每个元素的特定属性(例如@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/

相关文章:

java - Selenium 无法识别弹出窗口上的对象

html - Xpath选择所有子节点

xml - 无论属性的命名空间如何,都提取属性的值

xpath - html-agility-pack 提取背景图像

python - ElementNotInteractableException : Message: element not interactable error sending text in search field using Selenium Python

javascript - 使用 XPath 获取具有以特定字符串开头的属性名称的元素列表

xpath - 如何在 import.io 中正确设置 xpath 以进行抓取

java - 如何打印 org.jdom.Document 对象中的整个标签结构?

Java:Selenium 中的 getAttribute

xml - 如何基于xslt中以“pro_”开头的属性值选择max xml属性?