我想在 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。這是為什么?
uj5u.com熱心網友回復:
在您的目標輸出中,所有元素都屬于http://www.myurl.com/xml命名空間。它們從您的根元素繼承命名空間。
您只能使用此命名空間創建根元素。所有其他元素都有一個空的命名空間。這就是命名空間在您的第一個孩子中被重置為空命名空間的原因。
要獲得目標 xml 輸出,請使用您的命名空間創建 ALL 元素。例如使用
Set info = doc.createNode(NODE_ELEMENT, "Info", namesp)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363796.html
