关于 xml 节点位置的问题,如何获取到某个节点在整个文档中的相对位置?

wroxdo 2007-04-16 10:01:21
有这样一个XML文件:
<xmlroot>
<xmlElement id = "x1"/>
<xmlElement id = "x2"/>
<xmlElement id = "x3"/>
<xmlElement id = "x4"/>
</xmlroot>
偶用xpath定位到其中的某个节点,问题是,如何知道节点的位置呢?
XmlDocument xd = new XmlDocument();
xd.LoadXml(xmlString);
XmlNode xn =xd.SelectSingleNode("/xmlroot/xmlElement[@id='x3']");

偶该如何得到这个xn的索引位置呢?例如偶想知道它是第三个节点?
...全文
243 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluemoon0001 2007-04-17
  • 打赏
  • 举报
回复
楼主结贴吧,把分 分了吧。
bluemoon0001 2007-04-16
  • 打赏
  • 举报
回复
呵呵,正则偶也不是很熟,你自己看着写吧。
bluemoon0001 2007-04-16
  • 打赏
  • 举报
回复
可以通过下面方式试一下:
XmlNode parentNode = xd.SelectSingleNode("/xmlroot");
string innerStr = parentNode.InnerXml;

这样得到的 innerStr 内容如下:

<xmlElement id = "x1"/>
<xmlElement id = "x2"/>
<xmlElement id = "x3"/>
<xmlElement id = "x4"/>

我写个正则表达式,把 这个替换成 """X3" (注:第一个" 是 x1前的,第二个" 是 x2前的,第三个" 是 x3前的, x3后的 " 是x4前的)

这个你再用 innerStr.IndexOf("\"X3") + 1 这就是你要的序号。

这里的难点就是你如何来写这个正则。
wroxdo 2007-04-16
  • 打赏
  • 举报
回复
哦,那就先用着看吧。如果实在慢再想办法,呵呵。3KS
babyrockxray 2007-04-16
  • 打赏
  • 举报
回复
好像没有一个直接的方法,怎么也得用循环吧
bluemoon0001 2007-04-16
  • 打赏
  • 举报
回复
如果你非想得到序号的话,可以试试下面的方法:

XmlNode parentNode = xd.SelectSingleNode("/xmlroot");
int index = 0;
foreach(XmlNode n in parentNode.ChildNodes)
{
if(n.NodeType!=XmlNodeType.Comment)
{
index +=1;
XmlAttribute id = n.Attributes["id"];
if(id!=null&&id.Value=="x3")
break;
}
}
wroxdo 2007-04-16
  • 打赏
  • 举报
回复
嗯,偶现在的办法和 紫色兄的差不多。
不过这段代码的用户比较多。比较担心性能的问题。
所以想看看有木有节省性能的办法。:)
babyrockxray 2007-04-16
  • 打赏
  • 举报
回复
int index = 0;
XmlNode n = xn;
while (n != null)
{
n = n.PreviousSibling;
index++;
}
wroxdo 2007-04-16
  • 打赏
  • 举报
回复
呵呵,谢谢小天的建议啊
正则偶可以写啊。这个方案可以,性能和紫色兄的循环估计差不多吧,不过这种思路确实比较新颖啊

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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