XML 如何获取xml节点的穿透任意层次的“根节点”?高分求救!!!

sdl2005lyx 2008-02-15 09:43:30
在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 节点,父节点一层一层往上回溯太过麻烦,请告知另外办法!
...全文
322 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
GDY__GDY 2010-01-03
  • 打赏
  • 举报
回复
跟着学习了,这几天我也在研究这里,我也想知道有没有什么快捷的方法,我怕自己写完了一看有现成的方法....
烈火蜓蜻 2009-05-06
  • 打赏
  • 举报
回复

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去绑定
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
还有朋友回答吗,我要揭帖了!!!!
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
目前大部分XML解析器提供的办法,都是一层一层的往事回溯,没有直接到达的!不知道在XPath3.0是否提供这样的功能!?
  • 打赏
  • 举报
回复
貌似没有你想要得这种简单的逆查的方法。
XPathNavigator xpn = XNode.CreateNavigator();
xpn.SelectAncestors方法可以逆查,但是好像跟你的要求有差距。
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
我自己也查了一些关于XPath的资料,确实没有发现直接能穿透任意层次找到“父节点”的办法,看来目前只能用symbol441 的办法了!!感谢大家的回答,谢谢。。。
blestcc 2008-02-15
  • 打赏
  • 举报
回复
貌似没有什么好办法
做个标记等
mobin4211 2008-02-15
  • 打赏
  • 举报
回复
楼主给你一个我做的,要改一下

XmlDocument xmldoc = new XmlDocument();
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());

symbol441 2008-02-15
  • 打赏
  • 举报
回复
总不能一直ParentNode下去吧
----------
据我所知,这个确没有什么捷径可寻.
//这种方式其式其实质就是一种递归遍历的搜索方式
就楼主这种情况,如果层次较少,可以直接采用取ParentNode的方式
如果层次太多,可以写一个递归算法函数去搜索其父节点,不过其过程原理其实都是差不多的,只是用起来相对简单一些.


Company//Employee这种方式,貌似现在还不能用,呵呵,以后也许可以吧^_^

wang520d 2008-02-15
  • 打赏
  • 举报
回复
好像没有什么捷径找吧。。。
用XPath 直接定位到某个节点 然后根据当前节点去找父节点
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
symbol441,感谢你的回复,你这个办法当然是可行的,我这个例子的层次是比较少的,如果层次很多,总不能一直ParentNode下去吧?能否湘“Company//Employee”这样直接找到想要的“父节点”?
symbol441 2008-02-15
  • 打赏
  • 举报
回复
你直接取Employee节点的父节点的父节点就不行了么?

objNodeList = objDoc.SelectNodes(“Company//Employee”)
foreach(XmlNode node in objNodeList)
{
XmlNodet ParentNode=node.ParentNode.ParentNode//这个不就是你要取的父节点Department节点了?

}
可能我还是没有理解.
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
其实我的意思很简单,我们通过“//”可以穿透任意多个层次访问到子节点,
那么是否有一种办法:反过来获取穿透任意多个层次的父节点??
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
我的意思:当前节点是Employee,怎么通过这个节点找到Department,并不是通过文档节点objDoc去找!!!
<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>
symbol441 2008-02-15
  • 打赏
  • 举报
回复
如何获取一个节点任意层次的“根节点”
不知道楼主所谓的根节点是什么节点?
吐司vivi 2008-02-15
  • 打赏
  • 举报
回复
通过 XPath 查询 XML
xiaojing7 2008-02-15
  • 打赏
  • 举报
回复
objNodeList = objDoc.SelectNodes(“Department”)
你的意思是什么啊 ?
sdl2005lyx 2008-02-15
  • 打赏
  • 举报
回复
怎么每人回复啊,请高手现身啊!!!
内容概要:本文详细探讨了机组组合优化模型的构建,旨在通过合理安排各类发电机组的启停计划和优化出力分配,实现电力系统在经济性和稳定性上的最佳平衡。文章首先介绍了电力系统的四大主要组件——传统火电机组、风电机组、光伏机组和储能系统的参数及运行特性。接着,围绕最小化系统总运行成本这一目标,设计了优化目标函数,并明确了包括功率平衡约束、机组出力上下限约束、风光发电功率约束、弃风弃光约束、爬坡速率约束、储能系统荷电状态约束、充放电功率约束和充放电互斥约束在内的多项约束条件。最后,文章列出了求解机组组合优化模型所需的关键变量,如传统机组的开停状态、机组出力、启停成本、风电光伏实际出力、弃风弃光比例及储能系统的充放电功率和荷电状态,以实现系统的经济调度和可再生能源的最大化利用。 适合人群:从事电力系统研究、规划和调度工作的工程师和技术人员,以及对电力系统优化感兴趣的科研人员。 使用场景及目标:①帮助电力系统工程师理解不同类型发电机组的特点及其对系统稳定性、经济性和环保性的影响;②为制定合理的电力系统调度策略提供理论依据和技术支持;③促进可再生能源的有效整合,提高电力系统的灵活性和可靠性。 其他说明:本文提供的模型和方法不仅适用于当前的电力系统,也可为未来含高比例可再生能源接入的电力系统提供参考。文中涉及的具体数学公式和参数设定为实际应用提供了详细的指导,有助于提升电力系统的运行效率和经济效益。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧