簡體   English   中英

創建新的 XML 元素作為現有元素的父節點

[英]Create new XML Element as a Parent Node of Existing Element

我想創建一個新的 XML 元素,以使我現有的 XML 節點成為這個新元素的子節點。 我當前的 XML 文件的結構是:

<?xml version="1.0" encoding="utf-8"?>
<component>
<type name="A"></type>
<type name="B"></type>
</component>

我的想法是創建新元素“masterType”並將其作為現有“type”元素的父節點。

<?xml version="1.0" encoding="utf-8"?>    
<component>
<masterType>
<type name="A"></type>
<type name="B"></type>
</masterType>
</component>

我的問題是,如何使這個新元素成為我現有 xml 節點的父節點? 如果我使用 insertBefore() 會發生什么,“masterType”已經在元素“type”之前結束。

<?xml version="1.0" encoding="utf-8"?>
<component>
<masterType>
</masterType>
<type name="A"></type>
<type name="B"></type>
</component>

這是我的代碼

Dim fileName As String
fileName = ActiveSheet.OLEObjects("TextBox1").Object.Text
XMLFileName = fileName
Dim Found As Boolean
Dim docXMLDOM As DOMDocument
Dim nodeType As IXMLDOMNodeList
Dim nodElement As IXMLDOMElement
Dim nodNewElement As IXMLDOMElement
Dim nodReference As IXMLDOMElement
Set docXMLDOM = New DOMDocument
docXMLDOM.Load XMLFileName
Set nodeType = docXMLDOM.getElementsByTagName("type")

For Each nodElement In nodeType
If nodElement.Attributes.getNamedItem("name").Text = "A" Then
Set nodReference = nodElement
Set nodNewElement = docXMLDOM.createElement("masterType")
nodElement.ParentNode.InsertBefore nodNewElement, nodElement
Exit For
End If
Next

docXMLDOM.Save XMLFileName

簡化示例:

Sub AddParentNode()

    Dim docXMLDOM As MSXML2.DOMDocument60
    Dim els As IXMLDOMNodeList
    Dim masterEl As IXMLDOMElement
    Dim el As IXMLDOMElement

    Set docXMLDOM = New MSXML2.DOMDocument60
    docXMLDOM.LoadXML Range("A1").Value 'for testing
    Debug.Print "*** Before ***"
    Debug.Print docXMLDOM.XML

    Set els = docXMLDOM.getElementsByTagName("type")
    If els.Length > 0 Then
        'create the new parent element
        Set masterEl = docXMLDOM.createElement("masterType")
        els(1).ParentNode.appendChild masterEl
    End If

    'append each "type" element into the new parent node
    For Each el In els
        masterEl.appendChild el.CloneNode(True)
        el.ParentNode.RemoveChild el
    Next
    Debug.Print "*** After ***"
    Debug.Print docXMLDOM.XML

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM