如何移除XML同级节点?C#中用XmlDocument删除CreationDateTime对应的Value节点
解决XmlDocument移除CreationDateTime对应Value节点的问题
嘿,我来帮你搞定这个问题!首先得注意你之前用的Descendants()是Linq to XML(XDocument类)里的方法,而题目要求只能用XmlDocument,所以得换用XmlDocument自带的DOM操作方法才行。
要选中和CreationDateTime的Name节点同级的Value节点,核心思路是先定位到包含<Name>CreationDateTime</Name>的<Attribute>父节点,再在这个父节点下找到对应的Value子节点。这里有两种常用的实现方式:
方法一:遍历Attribute节点逐一判断
这种方式逻辑清晰,适合需要额外处理其他节点的场景:
// 初始化XmlDocument并加载XML内容 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@"你的XML字符串"); // 或者用xmlDoc.Load("文件路径")加载本地文件 // 获取所有<Attribute>节点 XmlNodeList attributeNodes = xmlDoc.SelectNodes("//Attribute"); foreach (XmlNode attributeNode in attributeNodes) { // 找到当前Attribute下的Name子节点 XmlNode nameNode = attributeNode.SelectSingleNode("Name"); if (nameNode != null && nameNode.InnerText.Trim() == "CreationDateTime") { // 找到同级的Value节点并移除 XmlNode valueNode = attributeNode.SelectSingleNode("Value"); if (valueNode != null) { attributeNode.RemoveChild(valueNode); } } } // 保存修改后的XML xmlDoc.Save("修改后的文件路径");
方法二:用XPath直接定位目标Value节点
如果逻辑简单,直接用XPath一步到位更简洁:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@"你的XML字符串"); // 用XPath直接定位到包含Name为CreationDateTime的Attribute下的Value节点 XmlNode targetValueNode = xmlDoc.SelectSingleNode("//Attribute[Name='CreationDateTime']/Value"); if (targetValueNode != null) { // 通过父节点移除Value节点 targetValueNode.ParentNode.RemoveChild(targetValueNode); } xmlDoc.Save("修改后的文件路径");
关键说明:
//Attribute表示匹配XML中所有层级的<Attribute>节点;Attribute[Name='CreationDateTime']是筛选条件,只保留子节点Name的文本为CreationDateTime的Attribute;- 找到目标Value节点后,必须通过它的父节点调用
RemoveChild来移除,因为XmlNode本身没有直接的Remove方法。
内容的提问来源于stack exchange,提问作者Marcer
相关产品推荐
相关产品推荐

