利⽤xpath对⽂件信息进⾏读写
在项⽬开发中遇到了对于诸如xml,.project,.classpath等等类型的⽂件进⾏读写的问题,起初因为没接触过,所以⼀头雾⽔,⽆从下⼿。翻看了很多资料后,觉得其实原理还是挺简单的 ,下⾯以读写.classpath为例,贴出具体的代码。在看这些代码之前,还需要熟悉下⾯两个知识点:
1。xpath : xpath 不了解的同学建议看下xpath的教程:
2。Dom4j : Dom4j 操作⽂件⼯具类,详见本⼈上⼀篇博客:
⾸先贴出⼀个classpath⽂件的例⼦:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="lipse.jdt.USER_LIBRARY/spring">
<attributes>
<attribute name="lipse.jstponent.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
</classpath>
不理解上⾯这个⽂件中的代码没关系,我们只是以这个⽂件为例⼦,进⾏读写操作,和上⾯类似,在classpath节点下创建以下节点:
使用dom4j解析xml文件<classpathentry kind="aaa" path="bbb">
<attributes>
<attribute name="ccc" value="ddd"/>
</attributes>
</classpathentry>
步骤:1.⾸先根据classpath⽂件路径读出⽂档对象
2.读出根节点classpath
3.创建classpathentry节点
4.创建attributes节点
5.创建attribute节点
代码如下:
//根据路径获取classpath⽂件的⽂档对象(Dom4jUtil详见本⼈上⼀篇博客:操作xml⽂件⼯具类)
Document document = Document("c:\\.classpath");
//利⽤xpath查classpath节点下是否已存在kind值为aaa且path值为bbb的节点,不存在才能新增
String xpath = "classpath/classpathentry[@path='bbb' and @kind='aaa']";
List<?> list = document.selectNodes(xpath);
if(list.size()==0){//不存在则新增
//添加classpath节点下⾯的classpathentry节点
Element root = RootElement();//获取⽂档对象的根节点的节点对象:上⾯例⼦中,根节点为classpath  Map<String, String> attMap = new HashMap<String, String>();
attMap.put("path","bbb");
attMap.put("kind","aaa");
Dom4jUtil.write("c:\\.classpath", document);
//添加classpathentry节点下⾯的attributes节点
Dom4jUtil.write("c:\\.classpath", document);
//添加attributes节点下⾯的attribute节点
String xpath1 = xpath+"/attributes";
List<?> list1 = document.selectNodes(xpath1);
Map<String, String> attMap2 = new HashMap<String, String>();
attMap2.put("value","ddd");
attMap2.put("name","ccc");
Dom4jUtil.write("c:\\.classpath", document);
}
运⾏后的结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="lipse.jdt.USER_LIBRARY/spring">
<attributes>
<attribute name="lipse.jstponent.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="aaa" path="bbb">
<attributes>
<attribute name="ccc" value="ddd"/>
</attributes>
</classpathentry>
</classpath>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。