一、 关于XPath
Java代码片断
import java.io.IOException;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w 3c .dom.*;
import org.xml.sax.SAXException;
public class XPathInjection {
public boolean doLogin(String loginID, String password)
throws ParserConfigurationException, SAXException, IOException,
XPathExpressionException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory
.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("users.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//users/user[loginID/text()='"
+ loginID + "'and password/text()='" + password
+ "' ]/firstname/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
return nodes.getLength() >= 1 ? true : false;
}
}
XML代码片断
<users>
<user>
<firstname>Ben</firstname>
<lastname>Elmore</lastname>
<loginID>abc</loginID>
<password>test123</password>
</user>
<user>
<firstname>Shlomy</firstname>
<lastname>Gantz</lastname>
<loginID>xyz</loginID>
<password>123test</password>
</user>
<user>
<firstname>Jeghis</firstname>
<lastname>Katz</lastname>
<loginID>mrj</loginID>
<password>jk2468</password>
</user>
<user>
<firstname> Darien </firstname>
<lastname>Heap</lastname>
<loginID>drano</loginID>
<password>2mne8s</password>
</user>
</users>
二、 关于XQuery
利用NUX(http://dsd.lbl.gov/nux/)解析,其包括Lucence和Saxon等开源项目
Java片段
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import nu.xom.Builder;
import nu.xom.Nodes;
import nux.xom.pool.XQueryFactory;
import nux.xom.xquery.XQuery;
import nu.xom.Document;
public class Main3 {
public static void main(String[] args) {
try{
Document doc = new Builder().build("user.xml");
XQuery xquery = new XQueryFactory().createXQuery(new File("dologin.xq"));
Map vars = new HashMap();
vars.put("loginID", "abc");
vars.put("password", "test123");
Nodes results = xquery.execute(doc, null, vars).toNodes();
for (int i=0; i < results.size(); i++) {
System.out.println(results.get(i).toXML());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
XML片断
<users>
<user loginID="abc" password="test123">
<firstname>Ben</firstname>
<lastname>Elmore</lastname>
</user>
<user loginID="xyz" password="123test">
<firstname>Shlomy</firstname>
<lastname>Gantz</lastname>
</user>
<user loginID="mrj" password="jk2468">
<firstname>Jeghis</firstname>
<lastname>Katz</lastname>
</user>
<user loginID="drano" password="2mne8s">
<firstname> Darien </firstname>
<lastname>Heap</lastname>
</user>
</users>
XQUERY片断
declare variable $loginID as xs:string external;
declare variable $password as xs:string external;
//users/user[@loginID=$loginID and @password=$password]