本帖最后由 huting8027 于 2014-06-17 16:36:08 编辑

解决方案 »

  1.   

    使用linq  to xml 读取成集合,获取nodes节点,进行重新构造。
      

  2.   

    这个不是很难,加载xml后, 从叶子节点开始,递归就行。
      

  3.   

    多谢楼上各位,已解决问题。 是根据XmlNode获取XPath,然后判断当前节点深度,拼接字符串即可。
    (最近google不好用,太可气了)        private static string FindXPath(XmlNode node)
            {
                StringBuilder builder = new StringBuilder();
                while (node != null)
                {
                    switch (node.NodeType)
                    {
                        case XmlNodeType.Attribute:
                            builder.Insert(0, "/@" + node.Name);
                            node = ((XmlAttribute)node).OwnerElement;
                            break;
                        case XmlNodeType.Element:
                            int index = FindElementIndex((XmlElement)node);
                            builder.Insert(0, "/" + node.Name);
                            node = node.ParentNode;
                            break;
                        case XmlNodeType.Document:
                            return builder.ToString();
                        default:
                            throw new ArgumentException("Only elements and attributes are supported");
                    }
                }
                throw new ArgumentException("Node was not in a document");
            }        private static int FindElementIndex(XmlElement element)
            {
                XmlNode parentNode = element.ParentNode;
                if (parentNode is XmlDocument)
                {
                    return 1;
                }
                XmlElement parent = (XmlElement)parentNode;
                int index = 1;
                foreach (XmlNode candidate in parent.ChildNodes)
                {
                    if (candidate is XmlElement && candidate.Name == element.Name)
                    {
                        if (candidate == element)
                        {
                            return index;
                        }
                        index++;
                    }
                }
                throw new ArgumentException("Couldn't find element within parent");
            }