zoukankan      html  css  js  c++  java
  • 给没有节点的文字添加节点

    最近在处理xml时,发现有很多xml的 节点内有些文字需要节点,正常取值取不出来,特地写个方法解决问题

    首先,看一下我遇到了什么问题

    <父节点>
        <子节点>111</子节点>
        <子节点>222</子节点>
        <子节点>333</子节点>
        <子节点>444</子节点>
        555
    </父节点>

    这样的话 elements()这个方法就只能取到 4个子节点

    下面这个方法就是用来解决这个问题

          /// <summary>
            /// 给没有节点的添加节点
            /// </summary>
            /// <param name="xElement">要处理的节点或xml</param>
            /// <param name="XName">要添加的节点名称</param>
            /// <returns></returns>
            public static XElement CreateNewEle(XElement xElement, string XName)
            {
                string xmlTxt = xElement.ToString().Replace("/>", "/>
    ").Replace("<", "
    <");
    
                string line = string.Empty;
    
                StringReader reader = new StringReader(xmlTxt);
    
                StringBuilder xmlbuilber = new StringBuilder();
                while ((line = reader.ReadLine()) != null)
                {
                    if (!string.IsNullOrEmpty(line.Trim()) && !line.Contains("<") && !line.Contains("/>"))
                    {
                        line = "<临时节点>" + line + "</临时节点>";
                    }
                    if (!string.IsNullOrEmpty(line))
                    {
                        xmlbuilber.Append(line);
                    }
                }
                xElement = XElement.Parse(xmlbuilber.ToString());
                return xElement;
            }

    调用方法 :

    ele :要处理的节点或xml

    “临时节点”:要添加的节点名称

     XElement newEle = CreateNewEle(ele,"临时节点");

    处理后结果:

    <父节点>
        <子节点>111</子节点>
        <子节点>222</子节点>
        <子节点>333</子节点>
        <子节点>444</子节点>
       <临时节点>555</临时节点>
    </父节点>

    ------------------------------------------------------------------------------------------------------------------------这个是分割线------------------------------------------------------------------------------------------------------------------------

    在实际使用中,上面的方法感觉还是有一些问题的。

    问题如下:

     string xmlTxt = xElement.ToString().Replace("/>", "/>
    ").Replace("<", "
    <");

    请看这句代码

     /> 替换为 />  

     < 替换为 <   

    为换行

    > 没有替换也不能替换 

    >不替换可能出现的场景:

    <父节点>
        <子节点>111</子节点>
        <子节点>222</子节点>
        <子节点>333</子节点>
        <子节点>444</子节点> 555
    </父节点>

    >替换出现的场景:

    <父节点>
        <子节点>
        111
    </子节点> <子节点>
    222
    </子节点> <子节点>
    333</子节点> <子节点>444</子节点> 555 </父节点>

    ------------------------------------------------------------

  • 相关阅读:
    生成缩略图时报GDI+中发生一般性错误
    跨数据库服务器查询和跨表更新
    javascript,jquery(闭包概念)
    聚集索引和非聚集索引(整理)
    ASP.NET MVC的过滤器
    如何在标题栏title前添加网站logo?
    sql语句执行顺序
    详解ASP.NET MVC的请求生命周期
    在事务中执行批量复制操作SqlBulkCopy,SqlTransaction .
    基于TCP 协议的RPC
  • 原文地址:https://www.cnblogs.com/mi21/p/11206987.html
Copyright © 2011-2022 走看看