2015-09-28 2 views
0

Я пытаюсь создать XmlElement и вставить его как sibling после существующего элемента. Вот существующий элемент:Невозможно вставить новый элемент в дерево XML

<!--  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.” Благодаря

ответ

0

Это здесь не так:

xmlDoc.InsertAfter(newDivElement, selectedElement); 

Вам нужно вставить ребенка в родительский узел вашего selectedElement, как это:

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

Спасибо - работает отлично. Я понимаю, как это работает сейчас. –