学习使用Xpth。前提注意除了需要dom4j包,还需要jaxen-xxxx.jar包,负责使用Xpath时会报错。
User.xml如下:
<users> <user id="1"> <username>admin</username> <password>admin</password> <userType>0</userType> <createTime></createTime> <lastLoginTime></lastLoginTime> <isDelete>0</isDelete> </user> </users>
我这里使用Dom4j获取Document两种方法
1通过文件名找
public Document read(String fileName) throws MalformedURLException, DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File(fileName));
return document;
}
2通过流
InputStream input = this.getClass().getClassLoader().getResourceAsStream(Users.xml)
public Document read(InputStream inputStream) throws DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
return document;
}
通过用户名密码查找用户,查找user下的username与password的子节点
Element node = (Element) doc.selectSingleNode("//user[username = '"+ username +"' and password = '"+ password +"']");
这里值得注意的有两点,字符串对象需要单引号。Dom4j的Node对象可以直接转换为Element对象。
通过id查找用户,使用属性查找
Element element = (Element) doc.selectSingleNode("//user[@id = "+ id +"]");
其中Xpath的规则可以参考http://www.w3school.com.cn/xpath/index.asp
注:在使用dom4j输出xml的时候,使用XMLWriter(Writer writer,OutputFormat format)可能在某些系统中导出输出中文错误(我遇到的情况是在64位系统中)。应该改为使用XMLWriter(FileOutputStream,OutputFormat format)。
try
{
//输出xml操作
writer = new org.dom4j.io.XMLWriter(new FileOutputStream(url),format);
// writer= new XMLWriter(new FileWriter(new File(url)),format); //输出中文会导致乱码
writer.write(doc);
writer.close();
}
catch (Exception e)
{
e.printStackTrace();
}
写给自己学习用,持续更新。