- Element rootEle = resultDoc.getRootElement();
- String nsUri = rootEle.getNamespaceURI();
- Map nsMap = new HashMap();
- nsMap.put("aop", "http://www.springframework.org/schema/aop");
- nsMap.put("tx", "http://www.springframework.org/schema/tx");
- XPath mesXpath = resultDoc.createXPath("//aop:bean/tx:bean");
- mesXpath.setNamespaceURIs(nsMap);
- List<Node> mesList = mesXpath.selectNodes(resultDoc);
- 如果要找一中xml的txbean,要用上面代码的方式
1.XML的命名空间:
许多XML配置文件中,通常在开头部分带有命名空间,如spring中:
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
- default-lazy-init="true">
- <aop:bean name="aopnode">
- <tx:bean name="txnode"/>
- </aop:bean>
- </beans>
在spring中,解析节点使用lazy loading方式:即先获取root节点,然后依次获取其子节点解析。在处理每个bean的命名空间时,会取其namespace与字符串“http://www.springframework.org/schema/beans”比较,以判断是否为对应spring的bean节点。一般其它情况并不存在需要对namespace进行处理
见:org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.isDefaultNamespace()
2.若要使用dom4j处理带namespace的xml文件,通过遍历根节点方式不影响命名空间。
而若通过普通的xpath方式查询,则必须对xpath进行预处理:
首先,将namespace放入map,设置到DocumentFactory
- SAXReader reader1 = new SAXReader();
- Map<String, String>map=new HashMap<String, String>();
- map.put("abc","http://www.springframework.org/schema/beans");
- reader1.getDocumentFactory().setXPathNamespaceURIs(map);
然后,当通过xpath查询节点或attribute时,需要将所有的节点属性前加上先前设置的map键值(attribute名不需要加)
eg,查询xpath: beans/bean[@id='root']
- Element root=(Element) document.selectSingleNode("abc:beans/abc:bean[@id='root']");
或者: //bean[@id='root']
- Element root=(Element) document.selectSingleNode("//abc:bean[@id='root']");
当然,可以使用正则表达式对原xpath进行转换
- public static String getXMLNameSpaceFixed(String xpath)
- {
- xpath= xpath.replaceAll("/(\\w)", "/"+"abc:$1");//replace start with "/"
- xpath= xpath.replaceAll("^(\\w)", "abc:$1"); //replace start with word
- return xpath;
- }
3.当处理另一个文档,此时若只是SAXReader reader2 = new SAXReader(),会发现仍然沿用原先的map;
而且重新设置新的namespace的map后,原有的reader1的xpath查询失效。
原因是,dom4j中默认的SAXReader初始化时调用DocumentFactory的单例对象,
因此必须使用新的工厂避免对原有工厂的影响:
- SAXReader reader2 = new SAXReader(new DocumentFactory());
- Map<String, String>map=new HashMap<String, String>();
- map.put("xyz","http://www.springframework.org/schema/beans");
- reader2.getDocumentFactory().setXPathNamespaceURIs(map);
相关推荐
NULL 博文链接:https://qiaokeli.iteye.com/blog/1790138
事例:带有子元素的元素结构定义 <!ELEMENT studinfo (name,age,course+,interest*,gendar?)> "?" 表示子元素只可以出现一个,也可以不出现 (0到1) "+" 表示子元素必须出现,可以出现多个 (1到多) "*" 表示...
所以XML作为数据的这条主线包括:第6章:SAX:XML的简单API 第7章:命名空间和模式第8章:链接和查询第9章:操作XML 第10章:XML和数据库第11章:服务器到服务器第12章:电子商务第14章:WAP和WML 3. XML的可视化...
13.6.4 标记行--呈现有别于其他行的背景色 13.6.5 小技巧--将代码添加到样式表 13.7 总结 第14章 级联样式表 14.1 什么是级联样式表 14.1.1 CSS样式和样式表 14.1.2 CSS的标准化 14.1.3...
3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 ...
3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 ...
带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 ...
带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 ...
带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 ...
6.7 有命名子项的元组 237 6.8 避免属性读写的冗余代码 239 6.9 快速复制对象 240 6.10 保留对被绑定方法的引用且支持垃圾回收 243 6.11 缓存环的实现 245 6.12 检查一个实例的状态变化 249 6.13 检查一个对象...
3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 ...
3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 ...
3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 ...
第4章(\代码\第04章) • sample01.htm 字符串直接量 • sample02.htm 使用转义字符 • sample03.htm 数组直接量的使用方法 • sample04.htm 数组直接量 • sample05.htm ...
8.2.4 选择有意义的键 8.2.5 考虑需要询问数据库的问题 8.2.6 避免多个空属性的设计 8.2.7 表格类型的总结 8.3 Web数据库架构 8.4 进一步学习 8.5 下一章 第9章 创建Web数据库 9.1 使用MySQL监视程序 9.2 登录到...
8.2.4 选择有意义的键 8.2.5 考虑需要询问数据库的问题 8.2.6 避免多个空属性的设计 8.2.7 表格类型的总结 8.3 Web数据库架构 8.4 进一步学习 8.5 下一章 第9章 创建Web数据库 9.1 使用MySQL监视程序 9.2 ...
28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j; public static ...