Xpath 集操作 - 排除某些节点(例如具有某些特征或特征)

Xpath set operations - exclude certain nodes (for example with certain feature or features)

我想排除一组节点中的某些节点。我正在使用有问题的 Mondial database in XML for practice purposes. For example, I want to find countries where no organization has its headquarters. ER Diagram for the database

这是我找到一些组织总部的国家的方式:

//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 The context item for axis step root/descendant::organization is absent. Query failed with dynamic error: The context item for axis step root/descendant::organization is absent

我也试过这个:

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

但它只有 returns 根元素:

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

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