2009-09-30 3 views
2

xmldocument에 새 노드를 추가하는 데 문제가 있습니다 (메모리에 생성됨). XmlDocument.SelectSingleNode() 메서드를 사용하여 루트 노드를 선택하면 가끔씩 작동하고 다른 시간에 "System.InvalidOperationException :이 문서에 이미 'DocumentElement'노드가 있습니다." 오류. 자세한 내용은이 XML 문서는 다중 레벨 XML 문서입니다.System.InvalidOperationException :이 문서에 이미 'DocumentElement'노드가 있습니다.

덧붙여서, 단위 테스트로 시도하면 (항상) 잘 동작합니다. ASP.NET 3.5에서 구현할 때 이상하게 작동하고 때로는 실패하고 때로는 실패합니다. 어떤 생각, 왜 이것이 도움이 될 수 있습니까? 모든 조언과 제안을 환영합니다.

감사합니다.

+1

요소를 선택하고 추가하는 방법을 보여주는 코드를 공유 할 수 있습니까? –

답변

3

속성 "DocumentElement"를 사용하여 XmlDocument의 루트 노드를 선택할 수 있습니다. 아니면 "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

관련 문제