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

问题描述

我想排除一组节点中的某些节点。我出于练习目的在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"?>

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

解决方法

您应该替换

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...