zoukankan      html  css  js  c++  java
  • 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");
      }
    }
  • 相关阅读:
    methodForSelector
    判定一个点P是否存在于指定的三角形ABC内
    xcode error failed to launch no such file or directory
    【转】SQLServer系统变量使用
    【转】SQL SERVER中查询某个表或某个索引是否存在
    wtforms
    Flask上下文管理、session原理和全局g对象
    Oldboy s4 Flask
    批处理删除文件夹下所有文件和文件夹
    autojs使用
  • 原文地址:https://www.cnblogs.com/zhxn/p/7026649.html
Copyright © 2011-2022 走看看