/** * 按照分解出来的位置和名称来设置需要解析的元素名称, 还有该元素对应的解析模型 * * @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); }
/** * 把分解出来的元素名称,根据对应的解析模型转换成为相应的解释器对象 * * @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; }