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文档中查询了!
posted on 2008-02-26 11:30
路过秋天 阅读(1558)
评论(12) 编辑 收藏 所属分类:
asp.net 2.0
发表评论
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();
这位还这么自信。本来就是XPath没写对。回去好好复习一下,别动不动上首页。
确实是xpath没写对。
/开头就表示根节点了啊。
我写的1个xpath就有5-6行,lz要动动脑筋,别很黄哦
多谢楼上各位
事实证明,结果是错在Xpath是的"/"的根节点上
不得不承认,回想当初,真的是很傻很天真!