打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
JDOM2.0.5版本通过xpath读取xml或读取带有命名空间的xml

org.jdom2.xpath.XPath类居然标注过时,无奈之下只能研究api。


发现Use XPathFactory/XPathExpression/XPathBuilder instead.


也就是说jdom应该是将xpath类的功能进行了更加详细的分类。


根据经验进行了一些类的测试,最后得出了读取xml的两种方式。


第一种方式,通过XPathFactory类读取xml


xml文件的内容如下

  1. <span style="font-size:14px"><?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="test.xsl"?>  
  3. <homepages xmlns:xlink="http://www.w3.org/1999/xlink">  
  4.   
  5.   <homepage xlink:type="simple"  
  6.   xlink:href="http://www.w3school.com.cn">Visit W3School</homepage>  
  7.     
  8.   <homepage xlink:type="simple"  
  9.   xlink:href="http://www.w3.org">Visit W3C</homepage>  
  10.     
  11. </homepages></span>  

通过SAXBuilder获取document和root


  1. String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";  
  2.           
  3. SAXBuilder saxBuilder = new SAXBuilder();  
  4.           
  5. Document document = saxBuilder.build(path);  
  6.           
  7. Element root = document.getRootElement();  


建立XPathFactory类的对象,需要引入jaxen的jar包,我们使用JaxenXPathFactory类来生成XPathFactory

  1. XPathFactory factory = JaxenXPathFactory.instance();  


生产xpath表达式实例对象,并获取结果集

  1. XPathExpression<Object> objs = factory.compile("//homepages");  
  2.           
  3. List<Object> objList = objs.diagnose(root, false).getResult();  

完整代码是

  1. String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";  
  2.           
  3. SAXBuilder saxBuilder = new SAXBuilder();  
  4.           
  5. Document document = saxBuilder.build(path);  
  6.           
  7. Element root = document.getRootElement();  
  8.           
  9. XPathFactory factory = JaxenXPathFactory.instance();  
  10.           
  11. XPathExpression<Object> objs = factory.compile("//homepages");  
  12.           
  13. List<Object> objList = objs.diagnose(root, false).getResult();  

第二种方式,通过XPathBuilder获取xpath表达式的实例对象集合

首先来创建一个filter,org.jdom2.filter.Filters中提供给我们了一些过滤器,我们这里选择元素类型的,Filter接口的全名是org.jdom2.filter.Filter

  1. Filter<Element> filter = Filters.element();  

生成XPathBuilder对象

  1. XPathBuilder<Element> builder = new XPathBuilder<Element>("//homepages", filter);  

根据它的compileWith(XPathFactory factory)方法来获取到我们需要的xpath表达式的实例对象集合

  1. XPathFactory factory = JaxenXPathFactory.instance();  
  2.           
  3. XPathExpression<Element> objs = builder.compileWith(factory);  

之后的方式就和方法1一样了。

完整代码是

  1. String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";  
  2.           
  3. SAXBuilder saxBuilder = new SAXBuilder();  
  4.           
  5. Document document = saxBuilder.build(path);  
  6.           
  7. Element root = document.getRootElement();  
  8.           
  9. Filter<Element> filter = Filters.element();  
  10.           
  11. XPathBuilder<Element> builder = new XPathBuilder<Element>("//homepages", filter);  
  12.           
  13. XPathFactory factory = JaxenXPathFactory.instance();  
  14.           
  15. XPathExpression<Element> objs = builder.compileWith(factory);  
  16.           
  17. List<Element> objList = objs.diagnose(root, false).getResult();     

获取带有命名空间的xml文件内容

使用XPathBuilder的setNamespace方法声明命名空间,Xpath表达式不需要再写"//",例如

  1. XPathBuilder<Element> builder = new XPathBuilder<Element>("ci:Teacher", filter);  
  2.           
  3. builder.setNamespace("ci", "http://www.test.cn/tuple");  





本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用DOM/JDOM解析XML文件(3)
JDOM/XPATH编程指南
JDOM+XPATH解析XML
使用JDOM设计简单的JSP+XML的系统留言板
JDom使用详解
JDOM 介绍及使用指南
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服