要在 Saxon 中对查询进行排序,我们首先运行查询:
XPathExecutable exe = xPath.compile(query);
XPathSelector selector = exe.load();
selector.setContextItem(xmlDocument);
XdmValue nodeSet = selector.evaluate();
// put the results in an array
ArrayList<XdmItem> nodes = new ArrayList<XdmItem>();
for (int i = 0; i < nodeSet.size(); i++)
nodes.add(nodeSet.itemAt(i));
// Sort the results
sortNodes(nodes, "RiskLevel", false, false);
private void sortNodes(ArrayList<XdmItem> nodes, final String sortKey, final boolean sortIsAttr, boolean descending) {
Comparator comparator = new Comparator() {
public int compare(Object node1, Object node2) {
if (node1 instanceof XdmNode && node2 instanceof XdmNode) {
if (sortIsAttr) {
return ((XdmNode) node1).getAttributeValue(new QName(sortKey)).compareTo(((XdmNode) node2).getAttributeValue(new QName(sortKey)));
}
else {
XdmSequenceIterator iter1, iter2;
if (sortKey.equals(".")) {
iter1 = ((XdmNode) node1).axisIterator(Axis.SELF, new QName(((XdmNode) node1).getNodeName().getLocalName()));
iter2 = ((XdmNode) node2).axisIterator(Axis.SELF, new QName(((XdmNode) node2).getNodeName().getLocalName()));
在两个 hasNext() 调用上都返回 false。
第一个问题,这是执行此操作的最佳方式吗?如果没有,有什么更好的方法?
第二个问题,如果这是最好的方法,为什么迭代器返回 false ofr hasNext()?
摇曳的蔷薇
相关分类