XML添加Crit节点:修正自闭合格式及末尾插入方法求助
解决XML节点格式与插入位置问题
问题分析
你目前的代码存在两个明确问题:
- 错误将
CritID当成节点文本内容写入,导致生成的<Crit>节点格式不符合要求 - 新节点被插入到
<CritGroup>的首位,需要调整到末尾位置
修正后的完整代码
// 创建正确格式的Crit节点 XmlNode newNode = xmlDoc.CreateNode(XmlNodeType.Element, "Crit", ""); // 给节点添加CritID属性(而不是设置InnerText) newNode.SetAttribute("CritID", "206"); // 获取目标CritGroup节点 XmlNode critGroupNode = xmlDoc["Search"]["CritGroup"]; // 将新节点追加到CritGroup的子节点末尾 critGroupNode.AppendChild(newNode);
关键改动说明
1. 修复节点格式错误
你之前用newNode.InnerText把属性内容写进了节点文本,这是错误的逻辑。XML里<Crit CritID="xxx"/>的CritID是节点属性,必须用SetAttribute方法添加:
newNode.SetAttribute("CritID", "206");
当节点没有子节点或文本内容时,XML解析器会自动生成自闭合格式的节点。
2. 修复插入位置错误
原来的代码里CritGroupNode["CritGroup"]是无效的,因为<CritGroup>的子节点是<Crit>,不存在嵌套的<CritGroup>,所以这个参考节点会返回null,导致InsertAfter默认把节点插在首位。
最直接的解决方式是用AppendChild,它会自动把新节点放到目标节点所有子节点的最后。如果一定要用InsertAfter,可以这样写:
// 获取CritGroup的最后一个子节点作为参考 XmlNode lastCritNode = critGroupNode.LastChild; critGroupNode.InsertAfter(newNode, lastCritNode);
修正后的XML输出
<Search Name="Test2" ProjTypeID="107"> <CritGroup CritGroupID="1" > <Crit CritID="205"/> <Crit CritID="208"/> <Crit CritID="206"/> </CritGroup></Search>
内容的提问来源于stack exchange,提问作者Sribin
相关产品推荐
相关产品推荐

