SelectNodes(xpath,namespace)方法中
无论是xmlDoc.SelectNodes(xpath,namespace) //假设xmlDoc为根节点,整个文档下的查询
还是xmlDoc.ChildNodes[i].SelectNodes(xpath,namespace) //节点下的查询

两个查询的结果一样:都会把整个文档符合xpath语法条件的都给查出来了
事实上我们所要的只是要在某一节点下符合xpath语法的结果


经过一鄱查询与研究解决之道后...
发现用xmlDoc.ChildNodes[i].Clone().SelectNodes(xpath,namespace)可以解决
即克隆出一节点后,再从克隆的节点中查询即可找出所需要的结果

但另一问题产生了,既然查询的结果是克隆后出来,那就算结果节点被改变后,原来的xmlDoc也不会有变化

要关联变化,暂时的方法是遍历xmlDoc.ChildNodes[i],从中找出符合条件的节点,再将结果节点进行替换

总结:
既然最后还要遍历替换结果,那之前的克隆节点查询显得有点就多余了,一开始直接遍历不就完了

结论:
那在某一节点下的Node.SelectNodes方法还有意义么?
SelectNodes只能用在整个xml文档中查询了!






Tag标签: .NET,xml,SelectNodes
posted on 2008-02-26 11:30 路过秋天 阅读(1558) 评论(12)  编辑 收藏 所属分类: asp.net 2.0

  回复  引用    
2008-02-26 11:50 | 新魔界私服 [未注册用户]
遍历和xml的方式是不一样的吧,楼主`
  回复  引用    
2008-02-26 11:54 | Richie [未注册用户]
xpath没写对
  回复  引用  查看    
2008-02-26 12:03 | 路过秋天      
@Richie
你自己试一下就知道了...
  回复  引用    
2008-02-26 12:16 | ds大苏打fds [未注册用户]
不该放首页
  回复  引用    
2008-02-26 12:40 | XX0XX [未注册用户]
很黄很暴力,这样的东西自己问下人就可以了
  回复  引用  查看    
2008-02-26 12:45 | RicCC      
string xml = @"<?xml version=""1.0""?>
<root>
<n name=""n1"">
<n name=""n2"">
<n name=""n3"" />
</n>
<n name=""n7"" />
<n name=""n8"">
<n name=""n9"" />
</n>
</n>
<n name=""n4"" />
<n name=""n5"">
<n name=""n6"" />
</n>
</root>
";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNodeList nodes = doc.DocumentElement.SelectNodes("n");
foreach (XmlNode n in nodes)
//输出结果n1, n4, n5
Console.WriteLine((n as XmlElement).GetAttribute("name"));
Console.WriteLine();
XmlNode node = doc.SelectNodes("//n[@name='n1']")[0];
XmlNodeList children = node.SelectNodes("n");
foreach (XmlNode n in children)
//输出结果n2, n7, n8
Console.WriteLine((n as XmlElement).GetAttribute("name"));
Console.ReadLine();
  回复  引用  查看    
2008-02-26 13:09 | 双鱼座      
这位还这么自信。本来就是XPath没写对。回去好好复习一下,别动不动上首页。
  回复  引用    
2008-02-26 13:19 | FoolTime [未注册用户]
确实是xpath没写对。
/开头就表示根节点了啊。
  回复  引用    
2008-02-26 13:42 | A.Z! [未注册用户]
我写的1个xpath就有5-6行,lz要动动脑筋,别很黄哦
  回复  引用  查看    
2008-02-26 13:57 | 毁于随      
哈哈.搞笑
  回复  引用  查看    
2008-02-26 14:10 | 路过秋天      
多谢楼上各位
事实证明,结果是错在Xpath是的"/"的根节点上

不得不承认,回想当初,真的是很傻很天真!

  回复  引用    
2008-02-26 14:12 | XPath错了 [未注册用户]
cnblogs总有搞笑的Post

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-26 11:41 编辑过
 
另存  打印