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,"进程详细信息");
狼仔,不需要那么多的循环的,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;
}
}
懂了,谢谢梦MM,你直接就检索到最里边的节点里了,我还一层一层的搜进去,XmlNodeList nodes = doc.SelectNodes( "/content/detail/file1" );,这个SelectNodes都没知道,郁闷