BeanShell和xerces(表达式解析)

 
表达式解析的学习
今天我们解决了工作流中表达式的解析,我们用到了一个开源框架叫beanShell,他可以实现表达式的求值,如表达试A+B-C<D等这样的表达试,下面我们来模拟一个简单的表达式求值
private Interpreter interp = new Interpreter(); // 表达式解析器
public Object evaluate() throws UtilEvalError, EvalError {
              //创建命名空间,
              NameSpace namespace = new NameSpace(new BshClassManager(), expression);
              //获得工作流中的变量
              List variables = this.workflowcontext.getWorkflow().getVariable();
 
              for (int i = 0; i < variables.size(); i++) {
                     Variable variable = (Variable) variables.get(i);
                     //初始化集合
                     namespace.setVariable(variable.getName(), variable.getValue(),
                                   false);
              }
              Object object = null;     
              object = interp.eval(this.expression, namespace);
              return object;
       }
 
interp.eval(this.expression, namespace);会反正一个Object的对象,他可以是Boolean,也可以是Integer等对象,NameSpace是变量命名空间,解析的时候表达式中的变量值会根据哪个空间中对应的键替换中值,exptession就是一个表达式,在他当中可以有变量存在(当然变量的值必须在NameSpace当中定义)。在定义NameSpace的时候要注意,数子比较必须包装成Integer类型的,不能包装成String类型,要不就会报告错误.
当然beanShell的功能远远不至这点,其他功能查质料。嘿嘿
 
接下来我们谈谈怎么把一个数据对象的信息写到XML里,并且建立关系。
这里我们用到了xerces。我们还是以模拟工作流当中的工作流引擎写入到XML里
import org.apache.xerces.dom.DocumentImpl;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
                    
                            try {
                     //创建Document对象
                                  Document doc = new DocumentImpl();
                     //建立关联信息
                                  writeWorkflow(doc);
                                  OutputFormat format = new OutputFormat(doc, encoding, true);
                                  format.setEncoding(encoding);
                                  XMLSerializer serial = new XMLSerializer(xml, format);
                                  serial.asDOMSerializer();
                                  serial.serialize(doc.getDocumentElement());
                                }
                                catch (Exception ioe) {
                                  ioe.printStackTrace();
                                }
                    }
                    private void writeWorkflow(Document doc) {
                     // TODO Auto-generated method stub
                      Element element = doc.createElement("workflow");
                      List list = workflow.getActivity();
                      Element activites = doc.createElement("activites");
                      element.appendChild(activites);
                      for(int i=0;i<list.size();i++)
                      {
                             Element ele = doc.createElement(((FlObject)list.get(i)).getName());
                             this.writeActivity(ele,(Activity)list.get(i));
                             activites.appendChild(ele);
                      }
                      doc.appendChild(element);
                    
                   }
 
 
通过以上的代码很容易就可以把一个数据对象和他们之间的关系写入到XML当中
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值