【问题标题】:Insert XML to XML Document at specified tag在指定标签处将 XML 插入 XML 文档
【发布时间】:2015-05-29 22:47:05
【问题描述】:

我正在处理 XML,我想将下面的 XML 标记插入到父 xml:

<Subject></Subject>

父 XML

<School>
   <ClassB></ClassB>
   <ClassA>
      <Students>
      </Students>
   </ClassA>
</School>

希望最终输出为

<School>
   <ClassB></ClassB>
   <ClassA>
      <Subject></Subject>
      <Students>
      </Students>
   </ClassA>
</School>

通过以下代码尝试:

XmlDocument xmlRequest = new XmlDocument();
 xmlRequest.LoadXml(parentXML);
 XmlDocumentFragment xmlfrag = xmlRequest.CreateDocumentFragment();
 xmlfrag.InnerXml = xmlSubjects;
 xmlRequest.DocumentElement.InsertBefore(xmlfrag,  xmlRequest.DocumentElement.FirstChild);

这将在 School 之后插入 Subject 元素。那么如何在特定路径插入。在这种情况下,在 ClassA 元素下。

请帮帮我。

【问题讨论】:

  • 所以你想找到(例如SelectSingleNode("School/ClassA/Students") 然后调用它的InsertBefore Method ...

标签: c#-4.0 linq-to-xml


【解决方案1】:

您需要使用 GetElementByName 或某种方法来获取 ClassA 节点:

XmlNode xNode = xmlRequest.SelectSingleNode("School/ClassA");

然后添加Subject作为新的子节点:

XmlNode newNode = xmlRequest.CreateNode(XmlNodeType.Element, "Subject", Nothing);
xNode.AppendChild(newNode);

如果要在特定的地方添加,枚举父节点和现有节点,然后使用InsertBefore:

XmlNode xNode = xmlRequest.SelectSingleNode("School/ClassA");
XmlNode siblingNode = xmlRequest.SelectSingleNode("School/ClassA/Students");
XmlNode newNode = xmlRequest.CreateNode(XmlNodeType.Element, "Subject", Nothing);
xNode.InsertBefore(xNode, xSibling);

【讨论】:

  • 但它会在学生标签之后插入主题标签。我希望它作为 ClassA 的第一个孩子插入
  • 不管是第一个孩子还是第二个孩子,除非你盲目地使用索引而不是名字来查找孩子。无论如何,添加后,您可以使用 InsertBefore 更改学生和主题元素的位置,其中 xNode 是您创建的新节点,这会将其移动到上一个兄弟节点之上:XmlNode xNode = XmlNode = xmlConfig.SelectSingleNode(XPath); XmlNode xSibling = xNode.PreviousSibling; XmlNode xParent = xNode.ParentNode; xParent.InsertBefore(xNode, xSibling);
  • 另外,如果您想要非常具体的结果,请务必在问题中获得所有标准。该问题只要求它在 ClassA 节点下,而不是它必须是 ClassA 节点中的第一个子节点。
  • 谢谢。下次我会确保有问题。对我来说效果很好
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2011-02-08
  • 2022-07-11
相关资源
最近更新 更多