您所在的位置: 程序员家园 -> 家园博客 ->
 
在哪里摔倒
就在哪里自己爬起来

用户登录

查  找

最新评论

最新留言

常用网站

网易邮箱 GMAIL  

百度搜索 MSDN

霏凡软件 BT精品

影视帝国 射 手 网

电驴下载 全 库 网

友情连接

茄菲的窝 冰冰博客

枫叶飘零 玫  瑰

ACEN 云 豹 子

统  计



XML文件的查询,直接遍历查找每一个节点搞的
狼子 发表于 2005-5-19 20:26:00 阅读全文 | 回复(2) | 引用通告 | 编辑

http://www.tiantiansoft.com/bbs/dispbbs.asp?boardID=40&ID=84872

还没是通用的,只是针对这一个XML文件可以用,因为里面用了这个xml文件的节点名,xml文件类型这样子:

processe.xml
<?xml version="1.0"?>
<content>
  <detail>
    <file1>system process</file1>
    <file2>system process</file2>
    <name>Windows内存处理系统进程 </name>
    <describe>Windows页面内存管理进程,拥有0级优先 </describe>
    <wrong>N/A</wrong>
    <sys>是</sys>
  </detail>
</content>

完整的是这个,因为是详细的进程列表,所以发上来:processe.rar

我要查找某一个进程名pna对应的进程的详细信息,就是file1或file2两个节点的属性值是和pna相等的,就取那个detail节点下的所有子节点的值:

string message="进程文件:" + pna;
   //从XML文件里读数据
   string xmlFna;
   xmlFna=Application.StartupPath.Remove(Application.StartupPath.IndexOf("bin\\Debug",0,Application.StartupPath.Length),9) + "processe.xml";
   //读取xml文件
   XmlDocument myxml=new XmlDocument();
   myxml.Load(xmlFna);
   //获取content节点的所有子节点
   XmlNodeList nodelist=myxml.SelectSingleNode("content").ChildNodes;
   //逐个遍历子节点
   bool ok=false;
   foreach(XmlNode xmlnode in nodelist)
   {
    //再取detail的子节点
    XmlNodeList nodelist_c=xmlnode.ChildNodes;
    //逐个遍历
    foreach(XmlNode xmlnode_c in nodelist_c)
    {
     if(xmlnode_c.Name=="file1")
     {
      if(xmlnode_c.InnerText.ToLower()==pna.ToLower())
      {
       //找到
       ok=true;
      }
     }
     if(xmlnode_c.Name=="file2")
     {
      if(xmlnode_c.InnerText.ToLower()==pna.ToLower())
      {
       //找到
       ok=true;
      }
     }
     if(xmlnode_c.Name=="name" && ok)
      message+="\n进程名称:" + xmlnode_c.InnerText;
     if(xmlnode_c.Name=="describe" && ok)
      message+="\n进程描述:" + xmlnode_c.InnerText;
     if(xmlnode_c.Name=="wrong" && ok)
      message+="\n常见错误:" + xmlnode_c.InnerText;
     if(xmlnode_c.Name=="sys" && ok)
      message+="\n是否为系统进程:" + xmlnode_c.InnerText;
    }
    if(ok) break;
   }
   MessageBox.Show(message,"进程详细信息");

Re:XML文件的查询,直接遍历查找每一个节点搞的
yameng发表评论于2005-7-14 1:49:00 个人主页 | 引用 | 返回 | 删除 | 回复

狼仔,不需要那么多的循环的,XmlDocument支持XPath查询的,我写了一段代码,你看看:

XmlDocument doc = new XmlDocument();
doc.Load( xmlFna );

XmlNodeList nodes = doc.SelectNodes( "/content/detail/file1" );
foreach ( XmlNode node in nodes )
{
    if ( node.InnerText == pna )
    {
        XmlNode parentNode = node.ParentNode;
        foreach ( XmlNode nodeSub in parentNode.ChildNodes )
        {
             System.Console.WriteLine( nodeSub.Name + ": " + nodeSub.InnerText );
        }
        break;
     }
}

Re:XML文件的查询,直接遍历查找每一个节点搞的
mountain315发表评论于2005-7-14 23:37:00 个人主页 | 引用 | 返回 | 删除 | 回复

懂了,谢谢梦MM,你直接就检索到最里边的节点里了,我还一层一层的搜进去,XmlNodeList nodes = doc.SelectNodes( "/content/detail/file1" );,这个SelectNodes都没知道,郁闷

发表评论:

    昵称:
    密码:
    主页:
    标题:
Powered by Oblog.