【问题标题】:System.InvalidOperationException: This document already has a 'DocumentElement' nodeSystem.InvalidOperationException:此文档已经有一个“DocumentElement”节点
【发布时间】:2009-09-30 06:20:01
【问题描述】:

我在将新节点附加到 xmldocument(在内存中创建)时遇到了麻烦。我已经使用 XmlDocument.SelectSingleNode() 方法选择了根节点,它有时会工作,有时它会给我“System.InvalidOperationException:此文档已经有一个'DocumentElement'节点。”错误。更多信息,这个xml文档是多级xml文档。

顺便说一句,当我用单元测试尝试它时它工作正常(总是),当我在 ASP.NET 3.5 中实现它时,它变得很奇怪,有时工作,有时失败。任何想法,为什么这会有所帮助?欢迎所有建议和建议。

谢谢。

【问题讨论】:

  • 你能分享一些代码来展示你如何选择和附加元素吗?

标签: asp.net xml


【解决方案1】:

您可以使用“DocumentElement”属性选择 XmlDocument 的根节点。或者我认为您可以使用属性“FirstChild”(未经测试)。

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

【讨论】:

  • 您好,感谢您的回复。它可以获取根节点,但仍然抛出“System.InvalidOperationException:此文档已经有一个'DocumentElement'节点。”。有趣的是它有时会起作用,有时不会。
【解决方案2】:

这对我有用。

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

【讨论】:

    【解决方案3】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多