树欲静而风不止btpka3.blog.chinaunix.net
btpka3
全部博文(135)
2012年(29)
2011年(41)
2010年(26)
2009年(12)
2008年(9)
2007年(12)
2006年(6)
zhangdiv
hcu5555
jayflygo
韩仪ails
沐依静
jiangzhe
cheercho
shanggua
609854
lzyunv
格伯纳
yuanzh78
Otokaze
masterro
bcskydri
tyshan
wangyinh
oyjyb
分类: Java
2007-06-30 11:13:35
/** * Title: * java 配置文件使用 - 解析使用默认命名空间的 xml文件 * Author: 张亮亮 * Date: 2007-6-30 * Description: * J2EE大作业中使用了想使用JSTL和Structs,而在web.xml中对JSTL的 * javax.servlet.jsp.jstl.sql.dataSource 已经配置,所以不想对其他 * Servlet使用的数据库工具SqlBean.java再单独配置,而直接解析 JSTL * 中数据源的配置。正好对于java配置文件还不是很熟,就练习一下。 * 刚开始想使用 ResourceBundle 来读取 web.xml,结果发现它似乎不 * 支持绝对路径和向上的相对路径,且我也不知道如何用它来解析xml。百度 * 了一下"java xml 解析", 参考了"Java中四种XML解析技术之不完全测试" * 文章,决定使用 Dom4J 来解析xml。但是发现若没有默认命名空间的xml文 * 件用 document.selectNodes("/web-app/jsp-config" ); 可以找到相关节 * 点, 但是用默认命名空间的就不行了, 要么返回的List长度为0,要么 * selectSingleNode返回为null。 * Google 了一下,参考了几篇文章,终于搞定了。 * Reference: * google "jaxen default namespace" * * * */ import java.io.*; import java.util.*; import org.dom4j.*; import org.dom4j.io.*; import org.jaxen.*; import org.jaxen.dom4j.*; public class R{ public static void main(String[] args){ /** * 这里是测试使用 ResourceBundle, 下面一句会选择当前目录下的文件 * test_en.properties,若使用Locale.CHINA则会读取文件 test_zh.properties * 若要读取子目录里的配置文件,这可以用 如下格式 "subdir/test" 或 * "subdir.test" */ ResourceBundle bundle = ResourceBundle.getBundle("test", Locale.ENGLISH); Enumeration e = bundle.getKeys(); while(e.hasMoreElements()){ String key = (String)e.nextElement(); System.out.println(key+" = "+bundle.getString(key)); } System.out.println("\n\n"); /** * 这里是参考了文章 * 主要是将默认命名空间映射为一个前缀,然后再用这个前缀来应用XPath * 需要import org.jaxen.* 和 org.jaxen.dom4j.*; */ SAXReader reader = new SAXReader(); Document document = null; List list = null; Node node = null; HashMap map = new HashMap(); Iterator it = null; //这里将默认命名空间自定义为 "j2ee" 前缀 map.put( "j2ee", ""); org.jaxen.XPath xpath = null; try{ document = reader.read(new File("web.xml")); xpath= new Dom4jXPath( "/j2ee:web-app/j2ee:jsp-config/j2ee:taglib/j2ee:taglib-uri"); xpath.setNamespaceContext( new SimpleNamespaceContext( map)); list = xpath.selectNodes( document); }catch(Exception exp){ System.out.println("出错啦!!"); exp.printStackTrace(); } it = list.iterator(); while(it.hasNext() ) { System.out.println(((Node)it.next()).getText()); } System.out.println("\n\n");/**/ /** * 这里是对上一部分的改进,没有import jaxen包,只使用 dom4j 的包。 */ org.dom4j.XPath dom4j_xpath = null; try{ document = reader.read(new File("web.xml")); dom4j_xpath = document.createXPath("/j2ee:web-app/j2ee:jsp-config/j2ee:taglib/j2ee:taglib-location") ; dom4j_xpath.setNamespaceURIs(map); list = dom4j_xpath.selectNodes(document); }catch(Exception exp){ System.out.println("出错啦!"); exp.printStackTrace(); } it = list.iterator(); while(it.hasNext() ) { System.out.println(((Node)it.next()).getText()); } } }
上一篇:C/C++复习: 关于C++继承与多态的一句话总结
下一篇:日文版Xp各种小问题以及乱码,等宽字体相关
登录 注册