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

时间:2020-11-01 12:12:27

标签: xml xpath saxon

我想排除一组节点中的某些节点。我出于练习目的在XML中使用Mondial database。例如,我想找到没有组织总部的国家/地区。有问题的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轴步根/后裔::组织的上下文项不存在。查询失败,并出现动态错误:轴步根/后裔::组织的上下文项不存在

我也尝试过:

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

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

2 个答案:

答案 0 :(得分:2)

您应该替换

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

作者

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

答案 1 :(得分:0)

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

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

它确实起作用了。但是我仍然不知道如何才能像我的第一个原始查询那样以纯命令行方式运行它。