📄 predicate.java.svn-base
字号:
package minixpath;
import java.util.Enumeration;
import java.util.Vector;
import org.kxml2.kdom.Element;
/**
* @author Cosmin
*
* since I don't want to implement a full-blown xpath engine
* our predicate
*/
public class Predicate
{
Vector resultSet;
Predicate(Vector inNodeSet, String predicateExpr)
{
int nodeIndex = -1;
if(predicateExpr == null || predicateExpr.length() <= 0) {
resultSet = inNodeSet;
return;
} else //we need to parse predicateExpr
resultSet = new Vector();
//check if this predicate is just a logical condition or a complete XPath query.
//for now we support only logical conditions
/*If it is a complete XPath expression
{
ResultSet = (new XPathExpression(XML_DOM, XPath Expression))
.getResult();
}//If it is a complete XPath expression */
try {
nodeIndex = Integer.parseInt(predicateExpr);
} catch(NumberFormatException nfe) {
//we do nothing, the predicate was not an index
}
if(nodeIndex != -1) {
resultSet.addElement(inNodeSet.elementAt(nodeIndex));
return;
}
String operation = null;
int index = -1;
if((index = predicateExpr.indexOf("=")) != -1) {
operation = "=";
} else if((index = predicateExpr.indexOf("<")) != -1) {
operation = "<";
} else if((index = predicateExpr.indexOf(">")) != -1) {
operation = ">";
} else {
//shouldn't be here
return;
}
Member member1 = new Member(new String(predicateExpr.toCharArray(), 0, index));
Member member2 = new Member(new String(predicateExpr.toCharArray(), index+1, predicateExpr.length()-index-1));
for(Enumeration e = inNodeSet.elements(); e.hasMoreElements(); ) {
Object obj = e.nextElement();
if(operation.equals("="))
if(!member1.eval(obj).equals(member2.eval(obj)))
continue;
else if(operation.equals(">"))
if(member1.eval(obj).compareTo(member2.eval(obj))<0)
continue;
else if(operation.equals("<"))
if(member1.eval(obj).compareTo(member2.eval(obj))>0)
continue;
resultSet.addElement(obj);
}
//here we should start parsing the predicateExpr
}//constructor
class Member
{
String m = null;
String attribute = null;
Member(String op)
{
this.m = op;
if(op.startsWith("@")) {
attribute = new String(op.toCharArray(), 1, op.length()-1);
}
}
public String eval(Object obj)
{
if(attribute == null)
return m;
if(!(obj instanceof Element))
return "";
Element element = (Element)obj;
String attr = element.getAttributeValue(null, attribute);
return attr!=null?attr:"";
}
}
public Vector getResult()
{
return resultSet;
}//getResult
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -