2015-05-29 57 views
1

我对XML的工作,我想下面插入XML标记成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); 

这将学校之后插入主题元素。那么如何在特定路径上插入。在这种情况下在ClassA元素下。

请帮我这里。

+1

所以你想找到(例如SelectSin gleNode(“School/ClassA/Students”),然后将其称为InsertBefore方法... –

回答

0

您需要使用GetElementByName或一些方法来获取ClassA的节点:如果你想将其添加到特定

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

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

然后添加主题的新的子节点枚举父节点和现有节点,然后使用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); 
+0

但它会在学生标签后插入Subject标签。我希望它被作为ClassA的第一个孩子插入 – user1893874

+0

不管它是第一个孩子还是第二个孩子,除非你一味地使用索引来找到孩子而不是名字。无论如何,在添加它之后,可以使用InsertBefore更改“学生”和“主题”元素的位置,其中“xNode”是您创建的新节点,这会将其移至上一个兄弟节点的上方:XmlNode xNode = XmlNode = xmlConfig。的SelectSingleNode(XPath的); XmlNode xSibling = xNode.PreviousSibling; XmlNode xParent = xNode.ParentNode; xParent.InsertBefore(xNode,xSibling);' –

+0

另外,如果你想要非常具体的结果,一定要在问题中得到你所有的标准。该问题只是要求它在ClassA节点下,而不是它需要成为ClassA节点中的第一个子节点。 –