C#创建指定结构XML时报错:节点类型无效问题咨询
解决XML节点添加报错的问题
问题根源
你碰到的这个错误,核心原因有两个:
JsonConvert.DeserializeXmlNode生成的XmlNode属于另一个独立的XmlDocument实例,直接把它加到当前的xmlDoc里,会因为节点的文档上下文不匹配,触发类型错误。- 你反序列化出来的节点外层是
<program>,但实际需要添加到<programs>下的是它内部的<Program>节点,直接加外层节点也不符合你想要的最终XML结构。
修正后的代码
XmlDocument xmlDoc = new XmlDocument(); XmlNode rootNode = xmlDoc.CreateNode(XmlNodeType.Element, "programs", null); xmlDoc.AppendChild(rootNode); foreach (dynamic item in access) { // 反序列化得到带<program>根节点的临时XmlNode XmlNode tempNode = JsonConvert.DeserializeXmlNode(item.ToString(), "program"); // 提取实际需要的<Program>子节点 XmlNode programNode = tempNode.FirstChild; // 将节点导入当前xmlDoc的上下文,true表示深导入(包含所有子节点) XmlNode importedNode = xmlDoc.ImportNode(programNode, true); // 把导入后的节点添加到根节点下 rootNode.AppendChild(importedNode); }
额外提示
- 注意XML节点的大小写:你的目标结构里是
<Program>和<programs>,要确保反序列化生成的节点大小写和目标一致,避免出现结构不匹配的问题。 - 如果
tempNode.FirstChild不是你要的<Program>节点,可以改用tempNode.SelectSingleNode("Program")来精准获取,保证拿到正确的节点。
内容的提问来源于stack exchange,提问作者ghetal
相关产品推荐
相关产品推荐

