c# - 在特定 XML 节点 C# 之后添加同级
问题描述
我的 xml 文档如下所示:
<root>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent2>
<element1>
</element1>
</parent2>
<parent2>
<element1>
</element1>
</parent2>
<parent3>
<element2>
</element2>
</parent3>
</root>
我想在第一个 parent2 节点之前的最后一个 parent1 节点之后添加一个新的 parent1 节点。
像这样:
<root>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent2>
<element1>
</element1>
</parent2>
<parent2>
<element1>
</element1>
</parent2>
<parent3>
<element2>
</element2>
</parent3>
</root>
我尝试使用 XmlDocument SelectSingleNode 和 AppendChild 方法,但它只在最后一个 parent3 节点之后添加新子节点。
编辑:
我试过这段代码:
string newNode = "<parent1/><element1>1</element1></parent1/>";
XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = newNode;
XmlElement element = (XmlElement)xmlDocument.SelectSingleNode(@"//root/parent1[last()]");
element.InsertAfter(xmlDocFrag, element); //--> this throws an error
element.AppendChild(xmlDocFrag); //--> this works but it inserts the new node inside the last parent1 node
解决方案
你非常接近,但你需要的方法是InsertAfter
必须在父母身上使用。看一下这个例子(注释在代码中)
string xml = @"
<root>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent1>
<element1>
</element1>
</parent1>
<parent2>
<element1>
</element1>
</parent2>
<parent2>
<element1>
</element1>
</parent2>
<parent3>
<element2>
</element2>
</parent3>
</root>
";
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
//you had invalid xml here. <parent1/> instead of <parent1> and </parent1/> instead of </parent1>
string newNode = "<parent1><element1>1</element1></parent1>";
XmlDocumentFragment xmlDocFrag = xmlDocument.CreateDocumentFragment();
xmlDocFrag.InnerXml = newNode;
XmlElement element = (XmlElement)xmlDocument.SelectSingleNode(@"//root/parent1[last()]");
//once you found last parent1 element, find it's parent
XmlNode parent = element.ParentNode;
//now, use that parent element and it's InsertAfter method to add new node as sibling to your found element
parent.InsertAfter(xmlDocFrag, element);
推荐阅读
- nginx - 使用 nginx-ingress 从外部 Kubernetes 集群向 RabbitMQ 发送消息
- python - 1.一旦作为类变量加载,文本文件就不会更新, 2.如何在没有 sp.chars 的情况下将字符串附加到文件
- python - Python返回对象“放置”而不是浮动
- node.js - 如何在更改时查看和重新运行 TypeScript?
- c# - 将列表中的拆分金额组合匹配到指定金额
- c# - 无法打开登录请求的数据库“身份”。登录失败。用户“DESKTOP\User”登录失败
- angular - 跨多个站点的外部构建 Angular 组件
- c# - 6.12.0 unity sdk 中是否没有继续操作“ContinueWithOnMainThread”?
- java - BYACCJ:如何在错误消息中包含行号?
- xml - 扩展中的 xsd 类型使用