首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSXML总是向元素中添加名称空间。

MSXML总是向元素中添加名称空间。
EN

Stack Overflow用户
提问于 2021-11-23 10:04:51
回答 1查看 171关注 0票数 1

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

代码语言:javascript
复制
<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属性,我不知道为什么:

代码语言:javascript
复制
 <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>

以下是代码:

代码语言:javascript
复制
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。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-23 10:27:10

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

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

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

代码语言:javascript
复制
Set info = doc.createNode(NODE_ELEMENT, "Info", namesp)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70078883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档