2016-09-24 7 views
0

document要素をルート要素にしたいところに設定しようとしています。私がそうしようとすると、次のエラーが発生する プロパティ 'DocumentElement'は読み取り専用です。それは理にかなっていると思います。私は現在、msxmlをsystem.xmlに変換しようとしています。Issue setting DocumentElement

Public Function GetXmlAllHierarchyObjects(Optional ByVal blnHideDisabled As Boolean = False) As XmlDocument 

    Dim recHierarchy As Recordset 
    Dim strSql As String = "" 
    Dim xmlDoc As XmlDocument = New XmlDocument() 
    Dim xmlRoot As XmlElement 
    Dim xmlParent As XmlNode 
    Dim intHeight As Integer 
    Dim xmlHierarchy As XmlElement 

    xmlRoot = xmlDoc.CreateElement("Hierarchy") 
    xmlDoc.DocumentElement = xmlRoot ' Error occurs here 
    recHierarchy = GetAllHierarchyObjects(blnHideDisabled, True) 

    Do While Not recHierarchy.EOF 
     xmlParent = xmlDoc.selectSingleNode("//Object[@ID='" & CStrSafe(recHierarchy("ParentID")) & "']") 
     If xmlParent Is Nothing Then 
      xmlParent = xmlRoot 
      intHeight = 0 
     Else 
      intHeight = CIntSafe(xmlParent.SelectSingleNode("Height").InnerText) + 1 
     End If 

     xmlHierarchy = xmlDoc.createElement("Object") 
     xmlParent.appendChild(xmlHierarchy) 

     xmlHierarchy.SetAttribute("ID", recHierarchy("ObjectID").ToString()) 

     xmlHierarchy.appendChild(xmlDoc.createElement("Height")) 
     xmlHierarchy.LastChild.InnerText = CStrSafe(intHeight) 

     xmlHierarchy.appendChild(xmlDoc.createElement("ParentID")) 
     xmlHierarchy.LastChild.InnerText = CStrSafe(recHierarchy("ParentID")) 
     xmlHierarchy.appendChild(xmlDoc.createElement("Name")) 
     xmlHierarchy.LastChild.InnerText = CStrSafe(recHierarchy("Name")) 

     recHierarchy.MoveNext() 
    Loop 

    CloseRecordset(recHierarchy) 

    GetXmlAllHierarchyObjects = xmlDoc 

End Function 

答えて

1

ドキュメント要素は実際にはルートノードではありません。これはルートの上のレベルです。したがって、ルートノードをこのノードの子として追加します。

Dim xmlDoc As XmlDocument = New XmlDocument() 
    Dim xmlRoot As XmlElement = xmlDoc.CreateElement("Hierarchy") 
    xmlDoc.AppendChild(xmlRoot) 
    MsgBox(xmlDoc.OuterXml)