我想在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>但是,我的代码正在"Info“元素中生成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。为什么会这样呢?
发布于 2021-11-23 10:27:10
在目标输出中,所有元素都属于http://www.myurl.com/xml命名空间。它们从根元素继承名称空间。
您只使用此命名空间创建根元素。所有其他元素都有一个空的命名空间。这就是为什么在您的第一个子名称空间中将名称空间重置为空名称空间的原因。
要获得目标xml输出,请使用命名空间创建所有元素。例如使用
Set info = doc.createNode(NODE_ELEMENT, "Info", namesp)https://stackoverflow.com/questions/70078883
复制相似问题