dom4j 通过 org.dom4j.DocumentFactory 设置命名空间来支持 带namespace 的 xpath
测试文件 test.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zno</groupId>
<artifactId>z-test</artifactId>
<version>0.0.1-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>xmlunit</groupId>
<artifactId>xmlunit</artifactId>
<version>1.6</version>
<scope>test</scope>
</dependency> </dependencies>
</project>
test.xml
所需依赖
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
测试类
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map; import javax.xml.transform.TransformerFactoryConfigurationError; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Node;
import org.dom4j.io.SAXReader; public class Dom4jDemo { public static void main(String[] args) throws TransformerFactoryConfigurationError, Exception {
InputStream is = Dom4jDemo.class.getResourceAsStream("/test.xml"); SAXReader saxReader = new SAXReader();
DocumentFactory documentFactory = saxReader.getDocumentFactory();
Map<String, String> namespaceURIs = new HashMap<String, String>();
namespaceURIs.put("a", "http://maven.apache.org/POM/4.0.0");
namespaceURIs.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
documentFactory.setXPathNamespaceURIs(namespaceURIs);
Document doc = saxReader.read(is); Node versionNode = doc.selectSingleNode("//a:project/a:dependencies/a:dependency[a:groupId/text()='junit' and a:artifactId/text()='junit']/a:version");
System.out.println(versionNode.getText()); }
}
测试结果
4.12
注意:
1) 依赖 jaxen 而非 xalan (这个是转换时用的)
2)a:project 即是 qualified name ,全称:
http://maven.apache.org/POM/4.0.0/:project
3) xpath 语法:
4) 简单举例
String bean = doc.selectSingleNode("//generatorConfiguration/context/table[contains(@tableName,'"+name+"')]/@domainObjectName").getText();
String javaModel = doc.selectSingleNode("//generatorConfiguration/context/javaModelGenerator/@targetPackage").getText();
String sqlMap = doc.selectSingleNode("//generatorConfiguration/context/sqlMapGenerator/@targetPackage").getText();
String javaClient = doc.selectSingleNode("//generatorConfiguration/context/javaClientGenerator/@targetPackage").getText();
System.out.println(javaModel + "." + bean + ".java");
System.out.println(sqlMap + "." + bean + "Mapper.xml");
System.out.println(javaClient + "." + bean + "Mapper.java");
dom4j 通过 org.dom4j.DocumentFactory 设置命名空间来支持 带namespace 的 xpath的更多相关文章
- dom4j 通过 org.dom4j.XPath 设置命名空间来支持 带namespace 的 xpath
测试文件 test.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...
- phpsotrm 设置命名空间
PHPStorm 添加支持 PSR-4 命名空间前缀设置 许久没有更新博客啦, 太忙了, 七月这最后一天来写点自己在使用 PHPStorm 上的小却很有用的功能吧. PHPStorm 默认是使用 PS ...
- Microsoft.VisualC 命名空间包含支持用 c + + 语言的代码生成和编译的类。 混合编程中使用COM接口指针
Microsoft.VisualC 命名空间包含支持用 c + + 语言的代码生成和编译的类. Microsoft.VisualC.StlClr Unmanaged Code 和 Managed Co ...
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
- yaf设置命名空间
修改yaf配置文件 文件是:yaf.ini extension=yaf.so yaf.use_namespace=1 index文件. 目录是application/controllers/Index ...
- MVC5为WebAPI添加命名空间的支持
前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...
- asp.net MVC5为WebAPI添加命名空间的支持
前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...
- MVC5为WebAPI添加命名空间的支持1
前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...
- discuz首页设置默认地址不带forum.php后缀的方法
最近在研究discuz,上传安装几部搞定,打开首页跳到含有"/forum.php"的网址,到管理中心改了好一会儿也没好.那么如何实现discuz首页设置不带forum.php后缀呢 ...
随机推荐
- check-versions.js和dev-client.js
// 用于在控制台输出带颜色字体的插件var chalk = require('chalk') // 语义化版本检查插件(The semantic version parser used by npm ...
- solr简介、学习详细过程!(超详细~)
solr是什么呢? 一.Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. 二.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出 ...
- redis集群的ruby环境
redis-4.0.3.gem 下载 https://rubygems.org/gems/redis/ 按照视频在这个地方出错: [root@lx opt]# gem install redis- E ...
- 递归函数 day17
一 递归函数 n = 1 金老板 38+2 =40n = 2 alex n+2= 金老板 36+2 = 38n = 3 wusir n+2 = alex wusir 36 def age(n): #n ...
- (转)Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的类或则方法
文章转自:http://blog.sina.com.cn/s/blog_52f623240102vpcr.html 在Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的 ...
- ParseCrontab类,解析时间规则
<?php /** * Created by PhpStorm. * User: ClownFish 187231450@qq.com * Date: 14-12-27 * Time: 上午11 ...
- C++/CLI学习入门
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxIAAAFlCAYAAAB/fN6bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw
- 杭电1133 排队买票 catalan
Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 域名ping不通,ip地址ping得通
原因:dns服务器过期,需要更换dns服务器地址
- msdn
https://docs.microsoft.com/en-us/cpp/standard-library/basic-string-class?view=vs-2017