2009-09-30 2 views
2

У меня возникла проблема с добавлением нового узла в xmldocument (созданный в памяти). Я выбрал корневой узел с помощью метода XmlDocument.SelectSingleNode(), он работает иногда, и в другое время он даст мне «System.InvalidOperationException: этот документ уже имеет узел DocumentElement». ошибка. Дополнительная информация, этот XML-документ - это многоуровневый XML-документ.System.InvalidOperationException: этот документ уже имеет узел DocumentElement

Кстати, когда я пытаюсь использовать его с модульным тестированием, он работает нормально (всегда), когда я реализую его в ASP.NET 3.5, он становится странным, иногда работает и не работает. Любая идея, почему это может помочь? Все советы и предложения приветствуются.

Спасибо.

+1

Можете ли вы поделиться каким-то кодом, показывающим, как вы выбираете и добавляете элементы? –

ответ

3

Вы можете выбрать корневой узел XmlDocument с помощью свойства «DocumentElement». Или я думаю, вы можете использовать свойство «FirstChild» (непроверено).

System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
XmlElement rootNode = doc.DocumentElement; 
+0

Привет, спасибо за ответ. Он может получить корневой узел, но все равно бросает «System.InvalidOperationException: этот документ уже имеет узел DocumentElement». Смешно думает, что это когда-то работает, а когда-то нет. –

1

Это сработало для меня.

xmlOriginFile = New XmlDocument() 
xmlTargetFile = New XmlDocument() 
xmlOriginFile.Load(readFile) //readFile is a string that hold path to xml document 
xmlTargetFile.Load(writeFile) //writeFile is a string that hold path to xml document 

Dim fileNav As XPathNavigator = xmlOriginFile.CreateNavigator() 
Dim fileItr As XPathNodeIterator = fileNav.Select("//data") 

Dim addToDestNodes As List(Of XmlNode) = New List(Of XmlNode) 

While (fileItr.MoveNext()) 

    Dim addNode As XmlNode = CType(fileItr.Current, IHasXmlNode).GetNode() 
    addToDestNodes.Add(addNode) 

End While //loop thru nodes 

If addToDestNodes.Count > 0 Then 

    For Each addedNode As XmlNode In addToDestNodes 

     Dim addTargetNode As XmlNode = xmlTargetFile.ImportNode(addedNode, True) 
     xmlTargetFile.DocumentElement.AppendChild(addTargetNode) 
    Next 

End If 

xmlTargetFile.Save(xmlTarget) //xmlTarget is a string that hold path to xml document 
0

XML имеет корневой элемент, и вы должны добавить новый элемент в этот корневой элемент.

XmlElement eleParent = docDestn.CreateElement("EleParent"); 
XmlElement eleChild = docDestn.CreateElement("Item"); 
eleParent.AppendChild(eleChild); 
XMLNode rootNode= xmlDoc.SelectSingleNode("RootEle"); 
rootNode.AppendChild(eleParent); 

Plps. обратитесь к ссылке для получения дополнительной информации: http://navinpandit.blogspot.in/2016/12/exception-this-document-already-has.html

Смежные вопросы