MSXML 总是向元素添加命名空间

MSXML always adding Namespace to Elements

我想在 VBA 中使用 MSXML 创建一个 XML。 目标输出非常基本:

<Main xmlns="http://www.myurl.com/xml">
    <Info>
        <BaseData>
            <CreationDate>2021-11-10</CreationDate>
            <Hardware>
                <Frquency>100</Frquency>
            </Hardware>
            <SomeCode>000000_0000000</SomeCode>
            <SomeName>HW GPU SoC 1</SomeName>
        </BaseData>
    </Info>
</Main>

但是我的代码在“信息”元素中生成了一个 xmlns 属性,我不知道为什么:

 <Main xmlns="http://www.myurl.com/xml">
    <Info xmlns="">
        <BaseData>
            <CreationDate>2021-11-10</CreationDate>
            <Hardware>
                <Frquency>100</Frquency>
            </Hardware>
            <SomeCode>000000_0000000</SomeCode>
            <SomeName>HW GPU SoC 1</SomeName>
        </BaseData>
    </Info>
</Main>

代码如下:

Dim doc As New MSXML2.DOMDocument60
Dim root As IXMLDOMNode
   
Dim info As IXMLDOMElement, baseData As IXMLDOMElement
Dim someCode As IXMLDOMElement, someName As IXMLDOMElement, hardware As IXMLDOMElement, freq As IXMLDOMElement, creationDate As IXMLDOMElement
       
Dim namesp As String
  
namesp = "http://www.myurl.com/xml"
Set root = doc.createNode(NODE_ELEMENT, "Main", namesp)
doc.appendChild root

          
Set info = doc.createElement("Info")
Set baseData = doc.createElement("BaseData")
Set someCode = doc.createElement("SomeCode")
Set someName = doc.createElement("SomeName")
Set hardware = doc.createElement("Hardware")
Set freq = doc.createElement("Frquency")
Set creationDate = doc.createElement("CreationDate")

freq.Text = "100"
hardware.appendChild freq

creationDate.Text = "2021-11-10"
someCode.Text = "000000_0000000"
someName.Text = "HW GPU SoC 1"

baseData.appendChild creationDate
baseData.appendChild hardware
baseData.appendChild someCode
baseData.appendChild someName
  
info.appendChild baseData

root.appendChild info
doc.Save (filePath)

当我将行更改为“Set info = doc.createNode(NODE_ELEMENT, "Info", namesp)”时,xmlns 属性移动到 BaseData。这是为什么?

在您的目标输出中,所有元素都属于 http://www.myurl.com/xml 命名空间。它们从您的根元素继承命名空间。

您只能使用此命名空间创建根元素。所有其他元素都有一个空的命名空间。这就是为什么命名空间在您的第一个 child.

中被重置为空命名空间的原因

要获得目标 xml 输出,请使用您的命名空间创建所有元素。 例如使用

Set info = doc.createNode(NODE_ELEMENT, "Info", namesp)