【问题标题】:MSXML always adding Namespace to ElementsMSXML 总是将命名空间添加到元素
【发布时间】:2021-11-23 10:04:51
【问题描述】:

我想在 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。这是为什么呢?

【问题讨论】:

    标签: xml vba msxml


    【解决方案1】:

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

    您只能使用此命名空间创建根元素。所有其他元素都有一个空的命名空间。这就是为什么命名空间在你的第一个孩子中被重置为一个空的命名空间。

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

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

    【讨论】:

    • 感谢您的解释! :)
    猜你喜欢
    • 2019-11-17
    • 2017-11-27
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2010-09-13
    相关资源
    最近更新 更多