zoukankan      html  css  js  c++  java
  • 格式化xml 给没有节点的内容添加节点

    这个困扰我很长时间的问题, 终于得到了解决!!!

    在很多时候我们会遇到下面这种情况的xml

    <a>
    aaaaa
    <b>bbbb</b>
    ccccccc
    </a>

    这种节点内含有 内容 并且还有 标签 的并且不换行

     a 和 c  没有节点

           /// <summary>
            /// 给没有节点的添加节点
            /// </summary>
            /// <param name="xElement">要处理的节点或xml</param>
            /// <param name="XName">要添加的节点名称</param>
            /// <returns></returns>
            public static XElement CreateNewEle(XElement xElement, string XName)
            {
                try
                {
                    if (xElement == null || string.IsNullOrEmpty(XName))
                    {
                        return null;
                    }
                    else
                    {
                        Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
    
                        XElement xElement1 = xElement;
    
                        foreach (var item in xElement.Elements())
                        {
                            string guid = Guid.NewGuid().ToString();
                            xElement1 = XElement.Parse(xElement1.ToString().Replace(item.ToString(), "|" + guid + "|"));
                            keyValuePairs.Add(guid, item.ToString());
                        }
    
                        var splits = xElement1.Value.Split('|');
                        for (int i = 0; i < splits.Count(); i++)
                        {
                            Guid.TryParse(splits[i], out Guid aaa);
                            if (Guid.Empty != aaa)
                            {
                                splits[i] = keyValuePairs[aaa.ToString()];
                            }
                        }
                        XElement element = new XElement(xElement.Name);
    
                        xElement.Attributes().ToList().ForEach(e => element.SetAttributeValue(e.Name, e.Value));
                        foreach (var item in splits)
                        {
                            if (!string.IsNullOrEmpty(item))
                            {
                                if (item.Contains("/"))
                                {
                                    element.Add(XElement.Parse(item));
                                }
                                else
                                {
                                    element.Add(new XElement(XName, item));
                                }
                            }
                        }
                        xElement = element;
                    }
                    return xElement;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }

    这个方法可以完美解决,有点麻烦,有更好的思路欢迎评论!!!

  • 相关阅读:
    C++中逻辑操作符的重载分析
    不要62
    P1052 过河
    P1029 最大公约数和最小公倍数问题
    P1345 [USACO5.4]奶牛的电信Telecowmunication
    Dining
    Dinic
    [Scoi2015]小凸玩矩阵
    12.16
    bzoj 3529
  • 原文地址:https://www.cnblogs.com/mi21/p/12933004.html
Copyright © 2011-2022 走看看