这是this question的后续内容。
我打电话:
XQueryCompiler compiler = processor.newXQueryCompiler();
// 21 of the following
xPath.declareNamespace(prefix, uri);
xPath.compile("for $n in '/def:System/def:Securities[def:AssetType != 50]' order by $n/'def:RiskLevel' return $n");
XQueryEvaluator selector = exe.load();
selector.setContextItem(xmlDocument);
// exception thrown on this:
selector.evaluate();
我得到: net.sf.saxon.s9api.SaxonApiException:'/'的第一个操作数的必需项类型为node();提供的值的项目类型为xs:string
我猜想'/ def:System / def:Securities [def:AssetType!= 50]'必须是节点-我该怎么做?而且,将其设为一个节点然后将其简化为一个节点,而不是返回与查询匹配的所有节点吗?
此查询可能很复杂,例如“ node / node [@attr ='5] / node / not [node ='dave'] / node / @ atr”
更新:查询“ / def:System / def:Securities [def:AssetType!= 50]中的$ n”,顺序为$ n /'def:RiskLevel,def:SecurityDesc 'return $ n“我也遇到同样的异常。
答案 0 :(得分:0)
查询中的那些单引号是虚假的。您将$ n绑定到字符串'/def:System/def:Securities[def:AssetType != 50]'
,错误是说$n/xxx
是字符串时不能使用$n
。