Пример #1
0
 /**
  * 按照分解出来的位置和名称来设置需要解析的元素名称, 还有该元素对应的解析模型
  *
  * @param end 是否是最后一个
  * @param ele 元素名称
  * @param propertyValue 是否是取属性
  * @param mapPath 设置需要解析的元素名称,还有该元素对应的解析模型的Map对象
  */
 private static void setParsePath(
     boolean end, String ele, boolean propertyValue, Map<String, ParserModel> mapPath) {
   ParserModel pm = new ParserModel();
   pm.setEnd(end);
   // 如果带有$符号就说明不是一个值
   pm.setSingleVlaue(!(ele.indexOf(DOLLAR) > 0));
   pm.setPropertyValue(propertyValue);
   // 去掉$
   ele = ele.replace(DOLLAR, "");
   mapPath.put(ele, pm);
   listEle.add(ele);
 }
Пример #2
0
 /**
  * 把分解出来的元素名称,根据对应的解析模型转换成为相应的解释器对象
  *
  * @param mapPath 分解出来的需要解析的元素名称,还有该元素对应的解析模型
  * @return 把每个元素转换成为相应的解释器对象后的集合
  */
 private static List<ReadXmlExpression> mapPath2Interpreter(Map<String, ParserModel> mapPath) {
   List<ReadXmlExpression> list = new ArrayList<ReadXmlExpression>();
   // 一定要按照分解的先后顺序来转换成解释器对象
   for (String key : listEle) {
     ParserModel pm = mapPath.get(key);
     ReadXmlExpression obj = null;
     if (!pm.isEnd()) {
       if (pm.isSingleVlaue()) {
         // 不是最后一个,是一个值,转化为
         obj = new ElementExpression(key);
       } else {
         // 不是最后一个,是多个值,转化为
         obj = new ElementsExpression(key);
       }
     } else {
       if (pm.isPropertyValue()) {
         if (pm.isSingleVlaue()) {
           // 是最后一个,是一个值,取属性的值,转化为
           obj = new PropertyTerminalExpression(key);
         } else {
           // 是最后一个,是多个值,取属性的值,转化为
           obj = new PropertysTerminalExpression(key);
         }
       } else {
         if (pm.isSingleVlaue()) {
           // 是最后一个,是一个值,取元素的值,转化为
           obj = new ElementTerminalExpression(key);
         } else {
           // 是最后一个,是多个值,取元素的值,转化为
           obj = new ElementsTerminalExpression(key);
         }
       }
     }
     // 把转换后的对象添加到集合中
     list.add(obj);
   }
   return list;
 }