You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:15:17