Dom4j解析xml文件

要解析xml文件,首先要看xml文件的节点上是否有xmlns属性(命名空间)

若有,则需要重写,覆盖。http://www.xuebuyuan.com/1760236.html建议使用第二种方法。

也有可能会遇到jaxen版本问题造成xpath工作不正常。(百度即可)

Dom4j和xpath结合选取xml中任意深度的(即所有的)特定元素

http://www.cnblogs.com/Payne-Wang/archive/2012/12/27/Dom4j-and-XPath.html

Dom4j和xpath的基础知识http://www.cnblogs.com/forlina/archive/2011/06/09/2076534.html

代码如下:

package com.ts.demx.util.transfer;

/**
 * Created by zhxn on 2017/5/5.
 */

import java.awt.print.Book;
import java.io.File;

import java.util.*;


import com.google.common.base.Strings;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class XmlUtils {
  private Document doc;
  private boolean isHasNamespace;
  private String prefix;

  //解析xml文件
  public XmlUtils(String pathname) {
    if (!Strings.isNullOrEmpty(pathname)) {
      // 创建SAXReader的对象saxReader
      SAXReader saxReader = new SAXReader();
      //将pathname转为文件形式
      File file = new File(pathname);
           /*
              //判断是否有命名空间namespace
             //覆盖xmlns
            //doc= null;
            Map map=new HashMap();
            map.put("xmlns","http://sarasvati.googlecode.com/ProcessDefinition");
            saxReader.getDocumentFactory().setXPathNamespaceURIs(map);*/
      try {
        //读取xml文件 转换成Document对象  
        this.doc = saxReader.read(file);
      } catch (DocumentException e) {
        e.printStackTrace();
      }
            /*//process根节点
            Element process = doc.getRootElement();
            String url =  process.getNamespaceURI();
            System.out.println(url);*/
    }
  }

  //对selectNodes方法进行封装
  public List<Object> getElements(String parserList) {
    //SelectNodes 使用 XPath 来选取节点
    return doc.selectNodes(parserList);
  }

  /**
   * 读取xml文件,返回节点信息
   *
   * @param parserList 条件
   * @return listStr 结果
   */
  public List<String> getAttributes(String parserList) {

    List<String> listStr = new ArrayList();
    //判断是否为空
    if (!Strings.isNullOrEmpty(parserList)) {
      List<Object> list = doc.selectNodes(parserList);
      // System.out.println(list.size());
      //迭代
      Iterator it = list.iterator();
      while (it.hasNext()) {
        //得到Attribute对象
        Attribute node = (Attribute) it.next();
        //System.out.println(node.getValue());
        //将所需要属性的value值存到listStr里
        listStr.add(node.getValue());
      }
    }
    System.out.println(listStr);
    return listStr;
  }

  //test
  public static void main(String[] args) {
    XmlUtils run = new XmlUtils("D:\workspace\demx-emt-stop\demxStore\fileStore\process\model\20150011\20150011.mxml");
    run.getAttributes("//element[@schema='Simple task']/@uid");
  }
}
原文地址:https://www.cnblogs.com/zhxn/p/7026649.html