XML文件的搜索

huwei001982 2007-10-14 09:51:58
该XML文件是用 DataSet.WriteXml()方法生成的,所以本来是可以直接用
DataSet.ReadXml() 方法来还原成 DataSet, 然后再从 DataSet 中搜索,
但因为数据量特别大,如果用 ReadXml 的方法将资料全部读入 DataSet,内存耗用太大,所以
只能转换思路,暂时想的是用 XmlReader 之类的方法来从 Xml 文件中搜索数据,但
显然这种方法过于麻烦,所以想请问有没有更简单的方法.TKS

注:请不要问诸如“为什么不从数据库中直接搜索”之类的,因为该项目是不连接数据库的
,所有的数据都已被转换为 xml 文件
...全文
159 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2007-10-16
  • 打赏
  • 举报
回复
使用XPATH进行搜索,
ekin7913046 2007-10-16
  • 打赏
  • 举报
回复
我觉得还是用Xpath来搜索吧!
lovefootball 2007-10-16
  • 打赏
  • 举报
回复
比较大的文件还是用XmlReader好的多~~~
vwxyzh 2007-10-16
  • 打赏
  • 举报
回复
用System.Xml.XPath.XPathDocument加上XPath,用这个处理大Xml文档效率好很多
IThurricane 2007-10-16
  • 打赏
  • 举报
回复
可以看看
http://topic.csdn.net/t/20040320/13/2864996.html
renyu732 2007-10-14
  • 打赏
  • 举报
回复
有条件的读取.像这样:
XmlNodeList quNodeList = doc.SelectNodes("/Context/Qu[child::ParentUniqueID = '0' and child::Class_UniqueID='" + exerciseScoreList[i].Class_UniqueID + "']");
jeremyyang824 2007-10-14
  • 打赏
  • 举报
回复
如果你熟悉XPath的话还可以用XPathNavigator做
jeremyyang824 2007-10-14
  • 打赏
  • 举报
回复
那就用DOM做搜索阿
csharpguy 2007-10-14
  • 打赏
  • 举报
回复
XPathNavigator 也还是要先把整个文件加载到内存里面才进行处理的

根据你的要求 XmlReader 可能是最简单的方案了

你可以把文件当纯文字文档进行处理 例如用StreamReader 但肯定比XmlReader 还要麻烦 而且自己实现出来的性能可能没有XmlReader 好
octverve 2007-10-14
  • 打赏
  • 举报
回复
从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;
}

huwei001982 2007-10-14
  • 打赏
  • 举报
回复
renyu732
----------------
你的 doc 应该是是一个 XmlDocument 实例吧,它需要先执行 XmlDocument.Load()后才能执行 SelectNodes, 所以实际上还是将资料全部加载到内存中了

jeremyyang824
----------------------
非常感谢你的回答,XPathNavigator应该是不错的选择,一定试试,呵呵


还有其它好的方案吗

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧