如何防止输出VBA中出现空白xmlns属性



晚安:

我正在制作一个ribbon,当我创建节点根和名称空间时,我会像atribute一样放置它。它的下一个节点在blanket 中重写命名空间

Code:
Private Sub crearRibbon()
    Dim RibbonXml As DOMDocument60
    Dim objRaizElem As IXMLDOMElement
    Dim objRibbonElem As IXMLDOMElement
    Dim objPestana As IXMLDOMElement
    Dim objPestanas As IXMLDOMElement
    Dim objGrupo As IXMLDOMElement
    Dim objControl As IXMLDOMElement
    Dim objRaizAtt As IXMLDOMAttribute
    Dim objRibbonAtt As IXMLDOMAttribute
    Dim objPestanaAtt As IXMLDOMAttribute
    Dim objGrupoAtt As IXMLDOMAttribute
    Dim objControlAtt As IXMLDOMAttribute
    Dim strRibbon As String
    Dim x As String
    Dim oNode As MSXML2.IXMLDOMElement

    Set RibbonXml = New DOMDocument60
    'Raiz
    Set objRaizElem = RibbonXml.createElement("customUI")
    RibbonXml.appendChild objRaizElem
    Set objRaizAtt = RibbonXml.createAttribute("xmlns")
    objRaizAtt.Text = ("http://schemas.microsoft.com/office/2006/01/customui")
    objRaizElem.setAttributeNode objRaizAtt
    'Ribbon
    Set objRibbonElem = RibbonXml.createElement("ribbon")
    objRaizElem.appendChild objRibbonElem
    Set objRibbonAtt = RibbonXml.createAttribute("startFromScratch")
    objRibbonAtt.Text = ("True")
    objRibbonElem.setAttributeNode objRibbonAtt
    Set oNode = RibbonXml.selectSingleNode("//ribbon")
    'Set oNode = RibbonXml.getElementsByTagName("/customUI/ribbon/[xmlns]")
    'oNode.removeAttribute ("xmlns")
    oNode.Attributes.removeNamedItem "xmlns"

    'Pestaña
    Set objPestana = RibbonXml.createElement("tabs")
    objRibbonElem.appendChild objPestana
    'Pestañas
    Set objPestanas = RibbonXml.createElement("tab")
    objPestana.appendChild objPestanas
    Set objPestanaAtt = RibbonXml.createAttribute("id")
    objPestanaAtt.Text = ("1")
    objPestanas.setAttributeNode objPestanaAtt
    Set objPestanaAtt = RibbonXml.createAttribute("label")
    objPestanaAtt.Text = ("A Custom Tab")
    objPestanas.setAttributeNode objPestanaAtt
    Set objPestanaAtt = RibbonXml.createAttribute("visible")
    objPestanaAtt.Text = ("true")
    objPestanas.setAttributeNode objPestanaAtt
    'Grupos
    Set objGrupo = RibbonXml.createElement("group")
    objPestanas.appendChild objGrupo
    Set objGrupoAtt = RibbonXml.createAttribute("id")
    objGrupoAtt.Text = ("dbCustomGroup")
    objGrupo.setAttributeNode objGrupoAtt
    Set objGrupoAtt = RibbonXml.createAttribute("label")
    objGrupoAtt.Text = ("A Custom Group")
    objGrupo.setAttributeNode objGrupoAtt
    'Control
    Set objControl = RibbonXml.createElement("control")
    objGrupo.appendChild objControl
    Set objControlAtt = RibbonXml.createAttribute("idMso")
    objControlAtt.Text = ("Paste")
    objControl.setAttributeNode objControlAtt
    Set objControlAtt = RibbonXml.createAttribute("label")
    objControlAtt.Text = ("Built-in Paste")
    objControl.setAttributeNode objControlAtt
    Set objControlAtt = RibbonXml.createAttribute("enabled")
    objControlAtt.Text = ("true")
    objControl.setAttributeNode objControlAtt
    RibbonXml.Save ("miRibbon1.xml")

结束子

我的输出

 <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon xmlns="" startFromScratch="False">
<tabs>
<tab id="1" label="A Custom Tab" visible="true">
<group id="dbCustomGroup" label="A Custom Group">
<control idMso="Paste" label="Built-in Paste" enabled="true"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
And ribbon xmlns=""

它只能得到带状

感谢

已经解决了消除空间xmlns="而不是使用createElement的问题,请使用CreateNode来设置命名空间。

现在:

    Set objPestanas = RibbonXml.createNode(1, "tab", "http://schemas.microsoft.com/office/2006/01/customui")

之前:

Set objPestanas = RibbonXml.createElement("tab")

全部满:

Private Sub crearRibbon()
Dim RibbonXml As DOMDocument60
Dim objRaizElem As IXMLDOMElement
Dim objRibbonElem As IXMLDOMElement
Dim objPestana As IXMLDOMElement
Dim objPestanas As IXMLDOMElement
Dim objGrupo As IXMLDOMElement
Dim objControl As IXMLDOMElement
Dim objRaizAtt As IXMLDOMAttribute
Dim objRibbonAtt As IXMLDOMAttribute
Dim objPestanaAtt As IXMLDOMAttribute
Dim objGrupoAtt As IXMLDOMAttribute
Dim objControlAtt As IXMLDOMAttribute
Dim strRibbon As String

Set RibbonXml = New DOMDocument60
'Raiz
Set objRaizElem = RibbonXml.createNode(1, "customUI", "http://schemas.microsoft.com/office/2006/01/customui")
RibbonXml.appendChild objRaizElem
'Ribbon
Set objRibbonElem = RibbonXml.createNode(1, "ribbons", "http://schemas.microsoft.com/office/2006/01/customui")
objRaizElem.appendChild objRibbonElem
Set objRibbonAtt = RibbonXml.createAttribute("startFromScratch")
objRibbonAtt.Text = ("True")
objRibbonElem.setAttributeNode objRibbonAtt

'Pestaña
Set objPestana = RibbonXml.createNode(1, "tabs", "http://schemas.microsoft.com/office/2006/01/customui")
objRibbonElem.appendChild objPestana
'Pestañas
Set objPestanas = RibbonXml.createNode(1, "tab", "http://schemas.microsoft.com/office/2006/01/customui")
Set objPestanas = RibbonXml.createElement("tab")
objPestana.appendChild objPestanas
Set objPestanaAtt = RibbonXml.createAttribute("id")
objPestanaAtt.Text = ("1")
objPestanas.setAttributeNode objPestanaAtt
Set objPestanaAtt = RibbonXml.createAttribute("label")
objPestanaAtt.Text = ("A Custom Tab")
objPestanas.setAttributeNode objPestanaAtt
Set objPestanaAtt = RibbonXml.createAttribute("visible")
objPestanaAtt.Text = ("true")
objPestanas.setAttributeNode objPestanaAtt
'Grupos
Set objGrupo = RibbonXml.createNode(1, "group", "http://schemas.microsoft.com/office/2006/01/customui")
'Set objGrupo = RibbonXml.createElement("group")
objPestanas.appendChild objGrupo
Set objGrupoAtt = RibbonXml.createAttribute("id")
objGrupoAtt.Text = ("dbCustomGroup")
objGrupo.setAttributeNode objGrupoAtt
Set objGrupoAtt = RibbonXml.createAttribute("label")
objGrupoAtt.Text = ("A Custom Group")
objGrupo.setAttributeNode objGrupoAtt
'Control
Set objControl = RibbonXml.createNode(1, "control", "http://schemas.microsoft.com/office/2006/01/customui")
'Set objControl = RibbonXml.createElement("control")
objGrupo.appendChild objControl
Set objControlAtt = RibbonXml.createAttribute("idMso")
objControlAtt.Text = ("Paste")
objControl.setAttributeNode objControlAtt
Set objControlAtt = RibbonXml.createAttribute("label")
objControlAtt.Text = ("Built-in Paste")
objControl.setAttributeNode objControlAtt
Set objControlAtt = RibbonXml.createAttribute("enabled")
objControlAtt.Text = ("true")
objControl.setAttributeNode objControlAtt
RibbonXml.Save ("miRibbon1.xml")

结束子

感谢所有

最新更新