博客园提问,结合网友回答http://q.cnblogs.com/q/36082/
 
打开是treelist树形显示xml所有节点,递归来实现
xmlDoc = new XmlDocument();
xmlDoc.Load(filename);
XmlNode node = xmlDoc.DocumentElement; TreeListNode rootNode = treeListNode.AppendNode(new object[] { node.Name }, -, node);
GenerateNodeTree(rootNode, node);
private void GenerateNodeTree(TreeListNode rootNode, XmlNode node)
{
for (int i = ; i < node.ChildNodes.Count; i++)
{
XmlNode xnl = node.ChildNodes[i];
TreeListNode childNode = treeListNode.AppendNode(new object[] { xnl.Name }, -, xnl);
treeListNode.MoveNode(childNode, rootNode);
GenerateNodeTree(childNode, xnl);
}
}

我用的treelist控件控件进行各个节点的显示,treelist的第一列存xmlnode.name,第二列是
xmlnode.value,tag是node。所以修改后,可以遍历这些节点值或者注释的父节点下的所有子节点,= tag的就是这个修改的节点,设置其value后保存即可
其中
xmlDoc是一个全局变量,打开时给他赋值,以后不重复打开了。如果重复打开同一文件判断
(xnl == node)时很可能不相等
 
/// <summary>

        /// 修改 <a>text</a> 里的text,防止内部有注释或者更多注记。此函数仍不好用,复杂的就无法处理了,需改进

        /// </summary>

        /// <param name="xmlpath">The xmlpath.</param>

        /// <param name="node">The node.</param>

        /// <param name="value">The value.</param>

        private void UpdateInnerXml(string xmlpath, string nodename, string value, XmlNode node)

        {

            try

            {

                XmlNode xn = xmlDoc.SelectSingleNode(nodename);

                XmlNode xnl = null;

                bool exist = false;

                ////理论上这里可以找到一个子节点Name == "#text"且=treelist node的tag,如果没找到再考虑截位

                for (int i = ; i < xn.ChildNodes.Count; i++)

                {

                    xnl = xn.ChildNodes[i];

                    if (xnl == node)

                    {

                        exist = true;

                        break;

                    }

                }

                if ((xnl != null) && exist)

                {

                    xnl.Value = value; 

                    node.Value = value; 

                }

                else

                {

                    XmlElement xe = (XmlElement)xn;

                    ////截取xe.InnerXml中xe.InnerText部分替换为修改内容,有与xe.InnerText相同的其他地方就无法处理了

                    xe.InnerXml = xe.InnerXml.Substring(, xe.InnerXml.IndexOf(xe.InnerText)) + value + xe.InnerXml.Substring(xe.InnerXml.IndexOf(xe.InnerText) + xe.InnerText.Length);

                }

                xmlDoc.Save(xmlpath);

            }

            catch

            {

            }

        }
												

最新文章

  1. 【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
  2. navicat 创建的表,username字段不能接受中文名字。
  3. CR LF的由来
  4. Maven-eclipse运行maven命令
  5. September 29th 2016 Week 40th Thursday
  6. AlertDialog使用时遇到问题
  7. Qt5 从头学(1)-- 环境
  8. qt中文乱码问题
  9. linux中的shell脚本编程
  10. java作业5
  11. ios技术面试题
  12. 使用DialogFragment创建对话框总结
  13. HDU 5623KK&#39;s Number DP
  14. Oracle 面试宝典 - General Questions
  15. Hadoop 架构初探
  16. idea14 maven项目 jdk编译版本无法修改
  17. MingW环境下的windows编程
  18. selenium 使用随笔
  19. Ubuntu 下命令安装 ZooKeeper
  20. 解决mysql:Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (111)

热门文章

  1. linux android真机测试
  2. VirtualBox 扩展C盘
  3. iOS开发中的错误整理,IOS9中canOpenURL调用失败分析
  4. 【BZOJ 2594】【WC 2006】水管局长数据加强版
  5. Handler消息机制与Binder IPC机制完全解析
  6. ios 图片点击两次禁止保存或拷贝
  7. wordpress模板各文件函数解析
  8. Tomcat安装
  9. js 中 == 和=== 有什么区别?
  10. IOS实现动画的几种简单方法