Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91267
  • 博文数量: 81
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1007
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 14:50
文章分类

全部博文(81)

文章存档

2014年(21)

2013年(60)

我的朋友

分类: Java

2014-01-04 14:59:09

  近几日都在忙在REVIEW项目代码,相对有点枯燥而有琐碎。不过这段工作对项目质量有是很关键的。下班后,上到博客,没有什么工作细节值得记录,想起来以前JAVA DOM4J编程时遇到的一个古怪问题,在此问问朋友们,我对JAVA可是相当的不熟悉的哦,当然逻辑还是看得懂的。

  下段代码是想从一个XML串中用XPATH提取需要的数据。

  (str是作为参数传入,是XML格式的字符串)

  ......

  ArrayList list=new ArrayList();

  Document doc = DocumentHelper.parseText(str);

  List datalist=doc.selectNodes("//datastring");

  .......sdudd0104

  只是因为str中的ROOT1节点中有xmlns属性,上述selectNodes就无法返回正确结果,DEBUG跟踪后能够确认就是这个NAMESPACE属性导致无法XPATH的(DOM4J里的Document类的函数,上述代码已经给出了)。因为项目紧,所以我就用笨办法去掉xmlns来实现XPATH的,代码如下,这样就能取回正确结果了。

  ......

  ArrayList list=new ArrayList();

  String XMLstr=null;

  int StartIndex=str.indexOf("

  int EndIndex=str.indexOf("");

  int NSStartIndex=str.indexOf("xmlns=");

  int NSEndIndex=str.indexOf(">",NSStartIndex);

  XMLstr=str.substring(StartIndex,NSStartIndex-1)

  +str.substring(NSEndIndex,EndIndex+"".length());

  Document doc = DocumentHelper.parseText(XMLstr);

  List datalist=doc.selectNodes("//datastring");

  .......

  虽然功能实现了,不过办法比较笨,并且很不灵活,比如还有别处有xmlns如何解决,有其他属性会不会出问题?

  有哪位朋友做过这个的,请不吝惕教!不胜涕零之至。

  最近,无意中搜寻到终极解决方法:

  HaspMap map = new HashMap();

  map.put("ax22", "");

  xpath = document.createXPath("//ax22:result");

  xpath.setNamespaceURIs(map);

  node = xpath.selectSingleNode(document);

  result = node.getText()

阅读(327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~