boolean compareObjects(Object operand1,Object operand2,String operator)throws Exception{
//both objects to be compared are node-sets
if(both operand1 and operand2 are node-sets){
Iterator i1 = operand1.iterator();
Iterator i2 = operand2.iterator();
while((node1 =i1.next()!=null){
while((node2 =i2.next()!=null){
//convert node1 and node2 to string values
String s1 = (String)node1;
String s2 = (String)node2;
if(compareBasic(s1,s2,operator))return true;
}
}
//neither object to be compared is a node-set
}else if(neither operand1 nor operand2 is node-set){
return compareBasic(operand1,operand2,operator);
}else{
//In this case, one object is node-set and the other is of basic type.Assume operand1 is node-set
Iterator i1 = operand1.iterator();
while((node1 =i1.next()!=null){
if(operand2 is number)convert node1 to number as a new object named newOperand1
if(operand2 is string)convert node1 to string as a new object named newOperand1
if(operand2 is boolean)convert node1 to boolean as a new object named newOperand1
if(compareBasic(newOperand1,operand2,operator))return true
}
}
return false
}
boolean compareBasic(Object operand1, Object operand2, String operator) throws Exception{
if (operator is "<=" or "<" or ">=" or ">"){
convert operand1 and operand2 to number
compare the two numbers with the operator;
}else if("=".equals(operator)||"!=".equals(operator)){
if(at least one object is boolean){convert the other object to boolean}
if(at least one object is number){convert the other object to number}
if(at least one object is string){convert the other object to string}
compare the new two objects with "=" or "!="
}else{
throw new Exception("Doesn’t support this operator!");
}
}