博客园提问,结合网友回答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

            {

            }

        }
												

C#操作XML,如何获取指定节点值?的更多相关文章

  1. XML操作 之获取指定节点值

    根据节点名称快速查找 指定节点值 using (TextReader stringReader = new StringReader(clearPassResponse)) { XmlReaderSe ...

  2. 从UEditor内容中获取指定节点值(转)

    今天吐槽一下百度的富文本编辑器UEditor,这种富文本编辑器极大地方便我们上传文件,开发人员无需编写任何上传代码,只需配置几个路径即可.但高度集成的东西有时也显得笨重,灵活度不高.比如:编辑器中我既 ...

  3. (转载)读取xml中的指定节点的值

            /// <summary>         /// 读取xml中的指定节点的值        /// </summary>         private st ...

  4. 读取xml中的指定节点的值

    /// <summary> /// 读取xml中的指定节点的值 /// </summary> private string ReadXmlNode(string filenam ...

  5. Jmeter 通过json Extracted 来获取 指定的值的id

    在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID import java.lang.String ; String getTargetName="iphone632g& ...

  6. C#:Json数据反序列化为Dictionary并根据关键字获取指定的值

    转自曾是土木人原文 C#:Json数据反序列化为Dictionary并根据关键字获取指定的值 Json数据: { "dataSet": { "header": ...

  7. Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值

    参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串 背景:在写存储过程时,需要获取表单提交的信息.表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如 ...

  8. xml获取指定节点的路径

    引用自http://www.w3school.com.cn/xpath/xpath_syntax.asp XPath 语法 Previous Page Next Page XPath 使用路径表达式来 ...

  9. 读取XML文件的指定节点的值 并转换为Item

    cmb_State_Send.ItemsSource = null; XmlDocument doc = new XmlDocument(); doc.Load("D:\\模板\\Works ...

随机推荐

  1. oracle判断字段是否存在语句

    declare v_cnt number; begin select count(*) into v_cnt from dba_tab_columns where table_name='T_IDC_ ...

  2. AngularJS指令的详解

    指令作为AngularJS中最为重要的部分,所以这个框架本身也是自带了比较多的的指令,但是在开发中,这些指令通常不能满足我们的需要,所以我们也是需要自定义一些指令的.指令是我们用来扩展浏览器能力的技术 ...

  3. Linux(Ubuntu)下如何安装JDK

    一.下载 首先,当然是要下载了. 按照需要选择不同的版本.笔者选择的是 jdk-7u45,如图: 二. 解压 将下载下来的 .tar.gz 文件解压. 使用如下命令解压: sudo tar zxvf ...

  4. Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合

    java教程|Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合教程并测试成功一.创建项目二.搭建struts-2.3.4.11.struts2必须的Jar包(放到W ...

  5. [转]JDBC中日期时间的处理技巧

    Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...

  6. .net的Hello World之旅

    class Program    {        //这是主函数,是程序的入口        static void Main(string[] args)        {            ...

  7. ES6新特性:Javascript中Generator(生成器)

    ES6的很多特性都跟Generator扯上关系,而且实际用处比较广, 包含了任何需要异步的模块, 比如ajax, filesystem, 或者数组对象遍历等都可以用到: Generator的使用: G ...

  8. spring3使用task:annotation-driven开始定时

    先看一个案例 package com.jCuckoo.demo; import java.text.SimpleDateFormat; import java.util.Date; import or ...

  9. Leetcode 300 Longest Increasing Subsequence

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  10. ubuntu 通过命令将数据复制到u盘

    自己现在也不好意思和别人说自己熟悉linux了,自己用linux,也是当做桌面系统用了,很少熟悉那些linux命令结果上次linux桌面图形界面进不去了只能用命令行,经过几个晚上的折腾终于弄好,现在记 ...