无法将新元素插入XML树

时间:2015-09-28 15:14:14

标签: c# xml visual-studio-2010 .net-4.0

我正在尝试创建XmlElement并将其作为兄弟插入现有元素之后。这是现有元素:

<!--     other XHTML  precedes this -->
         <p id="testElement">Test element</p>
<!--     other XHTML follows this  -->

该文档仅包含一个p元素,如上所述。 这是我要在p元素之后添加的元素:

<div class=”CodeChar”>
  <pre/>
</div>

我希望生成的XHTML看起来像这样:

<!--     other XHTML  precedes this -->
         <p id="testElement">Test element</p>
         <div class=”CodeChar”>
            <pre/>
         </div>
<!--     other XHTML follows this  -->

我正在使用以下代码行来获取对p元素的引用并添加div:

XmlElement selectedElement = null;
XmlNodeList elts = xmlDoc.GetElementsByTagName("p");
foreach (XmlElement elt in elts)
{
    String val = elt.GetAttribute("id");
    if (val.Equals("testElement"))
    {
        selectedElement = elt;
        break;
    }
}

if (selectedElement == null)
{
    return;
}

XmlElement newDivElement = xmlDoc.CreateElement("div");
newDivElement.SetAttribute("class", "CodeChar");
XmlElement preNode = xmlDoc.CreateElement("pre");
newDivElement.AppendChild( preNode );
xmlDoc.InsertAfter(newDivElement, selectedElement);

但是,上面代码中的最后一行会产生一个异常,表示“The reference node is not a child of this node.” 感谢

1 个答案:

答案 0 :(得分:0)

这是错误的:

xmlDoc.InsertAfter(newDivElement, selectedElement);

您需要将子项插入selectedElement的父节点,如下所示:

var parent = selectedElement.ParentNode;
parent.InsertAfter(newDivElement, selectedElement);