CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何使用XPath 计算字符串表达式

楼主lgg06(随风)2005-12-21 14:07:26 在 .NET技术 / C# 提问

曾经看到如下代码:  
      public   static   float   compute(string   p_str)  
  {  
  float   rtnValue=0;  
  XmlDocument   doc   =   new   XmlDocument();  
  XPathNavigator   nav=doc.CreateNavigator();  
  rtnValue=Convert.ToSingle(nav.Evaluate(p_str));  
  return   rtnValue;  
  }    
  今天拿来测试时发现1   *   3   -   (6/2   +   5)   等表达式都能正常工作,   但是一用除(4/2),   就会抛出异常  
  "The   expression   passed   to   this   method   should   result   in   a   NodeSet."    
   
  本人对XPath不熟,   请高手指点!! 问题点数:50、回复次数:14Top

1 楼BoYan1982(Improve your way of Thinking and Acting)回复于 2005-12-21 14:44:35 得分 0

楼主真笨,1   *   3   -   (6/2   +   5)不也用到   /   了嘛Top

2 楼BoYan1982(Improve your way of Thinking and Acting)回复于 2005-12-21 14:46:16 得分 0

笨死了笨死了Top

3 楼BoYan1982(Improve your way of Thinking and Acting)回复于 2005-12-21 14:57:41 得分 20

网上搜来的  
  //replace   your   function  
   
  using   System.CodeDom.Compiler;  
  using   Microsoft.CSharp;  
  using   System.Reflection;  
  using   System.Text;  
  public     static     object     Calc(string     expression)    
  {    
  string     className     =     "Calc";    
  string     methodName     =     "Run";    
  expression=expression.Replace("/","*1.0/");  
                                                   
  //     创建编译器实例。    
  ICodeCompiler     complier     =     (new     CSharpCodeProvider().CreateCompiler());    
  //     设置编译参数。    
  CompilerParameters     paras     =     new     CompilerParameters();    
  paras.GenerateExecutable     =     false;    
  paras.GenerateInMemory     =     true;    
     
  //     创建动态代码。    
  StringBuilder     classSource     =     new     StringBuilder();        
  classSource.Append("public     class     "+     className     +"\n");    
  classSource.Append("{\n");    
  classSource.Append("                 public     object     "     +     methodName     +     "()\n");    
  classSource.Append("                 {\n");    
  classSource.Append("                                 return     "+     expression     +     ";\n");    
  classSource.Append("                 }\n");    
  classSource.Append("}");    
     
  //System.Diagnostics.Debug.WriteLine(classSource.ToString());    
     
  //     编译代码。    
  CompilerResults     result     =     complier.CompileAssemblyFromSource(paras,     classSource.ToString());    
                                                   
  //     获取编译后的程序集。    
  Assembly     assembly     =     result.CompiledAssembly;    
       
  //     动态调用方法。    
  object     eval     =     assembly.CreateInstance(className);    
  MethodInfo     method     =     eval.GetType().GetMethod(methodName);    
  object   reobj   =   method.Invoke(eval,     null);    
  GC.Collect();  
  return   reobj;  
   
  }Top

4 楼lgg06(随风)回复于 2005-12-21 15:01:30 得分 0

sorry   sorry.  
  1   *   3   -   (6/2   +   5)   执行会抛异常的,,,   大意了大意了:本意是说   1   *   3   -   (6   +   5)可以执行Top

5 楼BoYan1982(Improve your way of Thinking and Acting)回复于 2005-12-21 15:03:27 得分 0

哇,   你什么时候44条裤衩啦Top

6 楼Sunmast(速马@Redmond, WA)回复于 2005-12-21 15:25:02 得分 30

动态编译太慢了  
  用这个:  
  http://blog.csdn.net/playyuer/archive/2004/12/05/205739.aspxTop

7 楼Sunmast(速马@Redmond, WA)回复于 2005-12-21 15:27:20 得分 0

或者使用JScript引擎:  
   
  using   Microsoft.JScript;  
  using   Microsoft.JScript.Vsa;  
   
  VsaEngine   ve   =   VsaEngine.CreateEngine();  
  return   Eval.JScriptEvaluate("4/2",   ve);Top

8 楼lgg06(随风)回复于 2005-12-21 16:39:09 得分 0

速马大哥:  
        用XPath不可以实现吗?  
        错误提示是什么意思啊?Top

9 楼min_jie(止戈)回复于 2005-12-21 16:47:47 得分 0

不要用这个来做字符串表达的计算。。  
  用到/的时候很容易出错。。。  
   
  用其它方法吧。。现在方法多的是。。Top

10 楼Sunmast(速马@Redmond, WA)回复于 2005-12-21 17:34:50 得分 0

/被解析为xml   dom的路径分割符了Top

11 楼shaoyongabo477(好兄弟)回复于 2005-12-21 17:37:14 得分 0

upTop

12 楼Sunmast(速马@Redmond, WA)回复于 2005-12-21 17:45:28 得分 0

终于找到了,要用div代替/  
  try:  
  compute("1+2   div   3")Top

13 楼Sunmast(速马@Redmond, WA)回复于 2005-12-21 17:49:47 得分 0

//   或者修改一下函数  
  public   static   float   compute(string   p_str)  
  {  
          XPathNavigator   nav   =   new   XmlDocument().CreateNavigator();  
          return   Convert.ToSingle(nav.Evaluate(p_str.Replace("/",   "   div   ")));  
  }Top

14 楼lgg06(随风)回复于 2005-12-22 16:29:09 得分 0

谢了Top

相关问题

  • 计算字符串表达式
  • 重赏:字符串表达式的翻译计算
  • 字符串变量如何转换为计算表达式?
  • 计算字符串表达式的值(50分)
  • 计算字符串形式的表达式
  • 求助关于字符串形式的表达式的计算
  • 怎样把字符串转成表达式并计算出结果?
  • 如何将一个字符串转换为能计算的数值表达式
  • 怎样用FLASH计算这个字符串形式的数学表达式?
  • 字符串表达式解析

关键词

  • 编译
  • 代码
  • jscript
  • microsoft
  • classsource
  • xpath
  • rtnvalue
  • nav
  • paras
  • methodname

得分解答快速导航

  • 帖主:lgg06
  • BoYan1982
  • Sunmast

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo