Xpath集操作-排除某些节点(例如具有某些功能)



我想排除一组节点中的某些节点。我使用XML中的Mondial数据库进行练习。例如,我想查找没有组织总部的国家。有关数据库的ER图。

这就是我如何找到一些组织总部所在的国家:

//organization/id(@headq)/id(@country)

当我从所有国家中减去某个组织有总部的国家时,我可以找到没有组织有总部所在的国家。

我想到了使用except运算符。所以,这就是我尝试的:

java -cp saxon-he-10.1.jar net.sf.saxon.Query -qs:doc('mondial.xml')"//country except //organization/id(@headq)/id(@country)"

但我得到了这个错误:

XPDY0002轴步骤根/子体::组织的上下文项不存在。查询失败,出现动态错误:轴步骤根/子代的上下文项:组织缺少

我也尝试过这个:

java -cp saxon-he-10.1.jar net.sf.saxon.Query -qs:doc('mondial.xml')//country[not(//organization/id(@headq)/id(@country))]

但它只返回根元素:

<?xml version="1.0" encoding="UTF-8"?>

如何找到没有组织总部的国家?

您应该更换

doc('mondial.xml')//country except //organization/id(@headq)/id(@country)"

通过

doc('mondial.xml')/(.//country except .//organization/id(@headq)/id(@country))

我用以下查询替换了我的查询:

doc('mondial.xml')//country/name except doc('mondial.xml')//organization/id(@headq)/id(@country)/name

我将查询放在xq文件中,并使用以下行执行它:

java -cp saxon-he-10.1.jar net.sf.saxon.Query query.xq

它确实奏效了。但我仍然不知道如何让它以纯命令行的方式工作,就像我的第一个原始查询一样。

最新更新