首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建新的XML元素作为现有元素的父节点

创建新的XML元素作为现有元素的父节点
EN

Stack Overflow用户
提问于 2020-05-13 08:11:42
回答 1查看 245关注 0票数 0

我想要创建一个新的XML元素,使我现有的XML节点成为这个新元素的子节点。我当前XML文件的结构是:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<component>
<type name="A"></type>
<type name="B"></type>
</component>

我的想法是创建新元素"masterType“,并将其作为现有"type”元素的父节点。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>    
<component>
<masterType>
<type name="A"></type>
<type name="B"></type>
</masterType>
</component>

我的问题是,如何使这个新元素成为现有xml节点的父节点?如果我使用了insertBefore(),那么"masterType“已经在元素"type”之前结束了。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<component>
<masterType>
</masterType>
<type name="A"></type>
<type name="B"></type>
</component>

这是我的密码

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 16:58:03

简化示例:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61769448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档