有这样一个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的索引位置呢?例如偶想知道它是第三个节点?

解决方案 »

  1.   

    int index = 0;
                    XmlNode n = xn;
                    while (n != null)
                    {
                        n = n.PreviousSibling;
                        index++;
                    }
      

  2.   

    如果你非想得到序号的话,可以试试下面的方法: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;
    }
    }
      

  3.   

    可以通过下面方式试一下:
    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 这就是你要的序号。这里的难点就是你如何来写这个正则。