在DOM路径查询中,我们可以用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素
如:objNodeList = objDoc.SelectNodes(“Company//Employee”),就能得到穿透任意层次的所有Employee节点集合。那么,反过来,如何获取一个节点任意层次的“根节点”,具体如下:
<Company>
<Department id="101">
<Department_Name>Cai WuBu</Department_Name>
<Manager>Zhang Bin</Manager>
<Employees>
<Employee id="12345">
<Employee_ID>12345</Employee_ID>
<Name>Zhang Bin</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
</Company>如果当前节点是Employee ,我怎么获取Department 节点,父节点一层一层往上回溯太过麻烦,请告知另外办法!
如:objNodeList = objDoc.SelectNodes(“Company//Employee”),就能得到穿透任意层次的所有Employee节点集合。那么,反过来,如何获取一个节点任意层次的“根节点”,具体如下:
<Company>
<Department id="101">
<Department_Name>Cai WuBu</Department_Name>
<Manager>Zhang Bin</Manager>
<Employees>
<Employee id="12345">
<Employee_ID>12345</Employee_ID>
<Name>Zhang Bin</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
</Company>如果当前节点是Employee ,我怎么获取Department 节点,父节点一层一层往上回溯太过麻烦,请告知另外办法!
你的意思是什么啊 ?
<Company>
<Department id="101">
<Department_Name>Cai WuBu</Department_Name>
<Manager>Zhang Bin</Manager>
<Employees>
<Employee id="12345">
<Employee_ID>12345</Employee_ID>
<Name>Zhang Bin</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
</Company>
foreach(XmlNode node in objNodeList)
{
XmlNodet ParentNode=node.ParentNode.ParentNode//这个不就是你要取的父节点Department节点了?}
可能我还是没有理解.
用XPath 直接定位到某个节点 然后根据当前节点去找父节点
----------
据我所知,这个确没有什么捷径可寻.
//这种方式其式其实质就是一种递归遍历的搜索方式
就楼主这种情况,如果层次较少,可以直接采用取ParentNode的方式
如果层次太多,可以写一个递归算法函数去搜索其父节点,不过其过程原理其实都是差不多的,只是用起来相对简单一些.
Company//Employee这种方式,貌似现在还不能用,呵呵,以后也许可以吧^_^
string path = Server.MapPath("" + server + "/experts/files/");
DirectoryInfo dirinfo = new DirectoryInfo(path);
DirectoryInfo[] dirinfo2 = dirinfo.GetDirectories();
xmldoc.Load("" + path + "" + dirinfo2[m].ToString() + "\\ordersHistory.xml");
XmlNodeList nodelist = xmldoc.DocumentElement.ChildNodes;
ss += Convert.ToDouble(nodelist[0].SelectSingleNode("profit").InnerText.ToString());
ss2 += Convert.ToDouble(nodelist[0].SelectSingleNode("equity").InnerText.ToString());
XPathNavigator xpn = XNode.CreateNavigator();
xpn.SelectAncestors方法可以逆查,但是好像跟你的要求有差距。
XmlDocument aDoc = new XmlDocument();
aDoc.Load( @"D:\1.xml" ); //XML的文件
XmlNodeList xnodelist = aDoc.SelectNodes( "/maplist/map/mapname" );
IEnumerable<string> list = from xe in xnodelist.OfType<XmlNode>()
select xe.InnerText;然后你可以用这个list去绑定