该XML文件是用 DataSet.WriteXml()方法生成的,所以本来是可以直接用
DataSet.ReadXml() 方法来还原成 DataSet, 然后再从 DataSet 中搜索,
但因为数据量特别大,如果用 ReadXml 的方法将资料全部读入 DataSet,内存耗用太大,所以
只能转换思路,暂时想的是用 XmlReader 之类的方法来从 Xml 文件中搜索数据,但
显然这种方法过于麻烦,所以想请问有没有更简单的方法.TKS注:请不要问诸如“为什么不从数据库中直接搜索”之类的,因为该项目是不连接数据库的
,所有的数据都已被转换为 xml 文件

解决方案 »

  1.   

    如果你熟悉XPath的话还可以用XPathNavigator做
      

  2.   

    有条件的读取.像这样:
    XmlNodeList quNodeList = doc.SelectNodes("/Context/Qu[child::ParentUniqueID = '0' and child::Class_UniqueID='" + exerciseScoreList[i].Class_UniqueID + "']");
      

  3.   

    renyu732 
    ----------------
    你的 doc 应该是是一个 XmlDocument 实例吧,它需要先执行 XmlDocument.Load()后才能执行 SelectNodes, 所以实际上还是将资料全部加载到内存中了jeremyyang824 
    ----------------------
    非常感谢你的回答,XPathNavigator应该是不错的选择,一定试试,呵呵
    还有其它好的方案吗
      

  4.   

    从xml文件中快速检索节点信息     
     <?xml version="1.0" encoding="utf-8" ?> 
    <root>
    <sm>
    <zsxm>001</zsxm>
    <zspm>10098</zspm>
    <zspm_mc>销售不动产</zspm_mc>
    </sm>
    <sm>
    <zsxm>002</zsxm>
    <zspm>10099</zspm>
    <zspm_mc>销售无形资产</zspm_mc>
    </sm>
    </root>举例:获取税种代码为001税目代码为10098的税目名称XmlDocument  XmlDoc_sm = new XmlDocument();
    XmlDoc_sm.Load(Server.MapPath("sm.xml"));
    string s = GetNodeText(XmlDoc_sm,"//sm[zsxm=001 and zspm=10098]","zspm_mc");//根据xpath返回节点对象,然后根据nodename返回该节点的值
      public string GetNodeText(XmlDocument xmlDoc,string xpath,string nodename)
      {   
       string result="";
       XmlNode nd = xmlDoc.SelectSingleNode(xpath);
       if(nd!=null)   
       {
        XmlNode cd = nd.SelectSingleNode(nodename);
        if(cd!=null)
        result = cd.InnerText.Trim();
       }
       return result;   
      }
      

  5.   

    XPathNavigator 也还是要先把整个文件加载到内存里面才进行处理的根据你的要求 XmlReader 可能是最简单的方案了你可以把文件当纯文字文档进行处理 例如用StreamReader 但肯定比XmlReader 还要麻烦 而且自己实现出来的性能可能没有XmlReader 好
      

  6.   

    可以看看
    http://topic.csdn.net/t/20040320/13/2864996.html
      

  7.   

    用System.Xml.XPath.XPathDocument加上XPath,用这个处理大Xml文档效率好很多
      

  8.   

    比较大的文件还是用XmlReader好的多~~~
      

  9.   

    我觉得还是用Xpath来搜索吧!