zoukankan      html  css  js  c++  java
  • C#操作XML,如何获取指定节点值?

    博客园提问,结合网友回答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 }, -1, node);
                    GenerateNodeTree(rootNode, node);
    private void GenerateNodeTree(TreeListNode rootNode, XmlNode node)
            {
                for (int i = 0; i < node.ChildNodes.Count; i++)
                {
                    XmlNode xnl = node.ChildNodes[i];
                    TreeListNode childNode = treeListNode.AppendNode(new object[] { xnl.Name }, -1, 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 = 0; 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(0, xe.InnerXml.IndexOf(xe.InnerText)) + value + xe.InnerXml.Substring(xe.InnerXml.IndexOf(xe.InnerText) + xe.InnerText.Length);
    
                    }
    
                    xmlDoc.Save(xmlpath);
    
                }
    
                catch
    
                {
    
                }
    
            }
    
    
    
  • 相关阅读:
    浏览器市场份额
    GDB gdb 调试
    tcp基础
    TCP加速方式
    windows10 CTCP
    大延时情况tcp和udp测试
    XAMPP与ISS在80端口冲突问题
    space transport protocols
    win10电脑搭建网站
    如何让nginx显示文件夹目录
  • 原文地址:https://www.cnblogs.com/jhlong/p/5445404.html
Copyright © 2011-2022 走看看