`
zheng_liming
  • 浏览: 8370 次
  • 性别: Icon_minigender_1
  • 来自: 湖北宜昌
社区版块
存档分类
最新评论

利用xpath对文件信息进行读写

阅读更多

       在项目开发中遇到了对于诸如xml,.project,.classpath等等类型的文件进行读写的问题,起初因为没接触过,所以一头雾水,无从下手。翻看了很多资料后,觉得其实原理还是挺简单的 ,下面以读写.classpath为例,贴出具体的代码。在看这些代码之前,还需要熟悉下面两个知识点:

       1。xpath : xpath 不了解的同学建议看下xpath的教程:xpath  w3c教程

       2。Dom4j : Dom4j 操作文件工具类,详见本人上一篇博客:操作xml文件工具类

 

首先贴出一个classpath文件的例子:

 

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/spring">
		<attributes>
			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
		</attributes>
	</classpathentry>
</classpath>

       不理解上面这个文件中的代码没关系,我们只是以这个文件为例子,进行读写操作,和上面类似,在classpath节点下创建以下节点:

                              <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 = Dom4jUtil.getDocument("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 = document.getRootElement();//获取文档对象的根节点的节点对象:上面例子中,根节点为classpath
	Map<String, String> attMap = new HashMap<String, String>();
	attMap.put("path","bbb");
	attMap.put("kind","aaa");
	Dom4jUtil.createElement(root,"classpathentry",attMap ,null);
	Dom4jUtil.write("c:\\.classpath", document);

	//添加classpathentry节点下面的attributes节点
	Dom4jUtil.createElement((Element)document.selectNodes(xpath).get(0),"attributes",null ,null);
	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.createElement((Element)list1.get(0),"attribute",attMap2 ,null);
	Dom4jUtil.write("c:\\.classpath", document);
}

 

 运行后的结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/spring">
		<attributes>
			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
		</attributes>
	</classpathentry>
	<classpathentry kind="aaa" path="bbb">
		<attributes>
			<attribute name="ccc" value="ddd"/>
		</attributes>
	</classpathentry>
</classpath>

 

 

分享到:
评论

相关推荐

    4.利用线程池执行Task.zip

    文件读写基本操作 CSV和Excel文件的处理 文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫...

    asp.net知识库

    Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细...

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    java api最新7.0

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    JavaAPI中文chm文档 part2

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    JavaAPI1.6中文chm文档 part1

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    JDK_1_6 API

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    [Java参考文档]

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    Java 1.6 API 中文 New

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    [Java参考文档].JDK_API 1.6

    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...

    net学习笔记及其他代码应用

    数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且...

Global site tag (gtag.js) - Google Analytics