XPath获取带命名空间的XML

XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns="http://www.guotest01.in/01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.guotest01.in/01 test05.xsd">  
  <书 出版社="出版社01">
    <书名>书名01</书名>  
    <作者>作者1</作者>  
    <售价>1</售价>  
    <简介>简介1</简介>
  </书>  
  <书 出版社="出版社02">
    <书名>书名02</书名>  
    <作者>作者2</作者>  
    <售价>2</售价>  
    <简介>简介2</简介>
  </书>  
  <书 出版社="出版社03">
    <书名>书名03</书名>  
    <作者>作者3</作者>  
    <售价>3</售价>  
    <简介>简介3</简介>
  </书>  
  <书 出版社="出版社04">
    <书名>书名04</书名>  
    <作者>作者4</作者>  
    <售价>4</售价>  
    <简介>简介4</简介>
  </书>
</书架>

需求:取得第二本书节点下的作者节点的文本内容即:/书架/书[2]/作者,我用的JDK1.8

用如下的java代码无法解析带有命名空间的XML,原因就不多说了,百度上有很多,我这里就只说我的一种解决办法。

       String path = "WebContent/testXml/book2.xml";
       SAXReader reader = new SAXReader();
       Document document=reader.read(path);
       Node author = document.selectSingleNode("/书架/书[2]/作者");
       System.out.println(author.getText());

 

我的解决办法就是设置命名空间并且XPath语句查询的时候节点前面带上命名空间的名称。

        Map map = new HashMap();  
        map.put("xmlns","http://www.guotest01.in/01");  
        SAXReader saxReader = new SAXReader();  
        File file = new File("WebContent/testXml/test4.xml");  
        saxReader.getDocumentFactory().setXPathNamespaceURIs(map);  
        Document document = saxReader.read(file);  
        List<Element> tmp = document.selectNodes("/xmlns:书架/xmlns:书[1]/xmlns:作者");
        System.out.println(tmp.size());
        System.out.println(tmp.get(0).getText());

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值