C#操作XML,如何获取指定节点值?
2024-08-31 05:25:45
博客园提问,结合网友回答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 { } }
最新文章
- 【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
- navicat 创建的表,username字段不能接受中文名字。
- CR LF的由来
- Maven-eclipse运行maven命令
- September 29th 2016 Week 40th Thursday
- AlertDialog使用时遇到问题
- Qt5 从头学(1)-- 环境
- qt中文乱码问题
- linux中的shell脚本编程
- java作业5
- ios技术面试题
- 使用DialogFragment创建对话框总结
- HDU 5623KK&#39;s Number DP
- Oracle 面试宝典 - General Questions
- Hadoop 架构初探
- idea14 maven项目 jdk编译版本无法修改
- MingW环境下的windows编程
- selenium 使用随笔
- Ubuntu 下命令安装 ZooKeeper
- 解决mysql:Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (111)