为什么属性也附加到子节点?

Why is the attribute also append to the child node?

我想创建一个如下所示的 XML 文件,但问题是通过将属性添加到 startMethod 它也会附加到子节点 globalSettings

代码:

' Build SOAP Request
Set objSOAPXML = CreateObject("MSXML2.DOMDocument.4.0")
objSOAPXML.async = False

' Create Root Element: Web Service
Set objWebService = objSOAPXML.CreateElement("startMethod")
objWebService.setAttribute "xmlns", xmlns
objSOAPXML.documentElement.childNodes(0).appendChild objWebService

' Create Web Service Request
Set objGlobalSettings = objSOAPXML.CreateElement("globalSettings")
objWebService.appendChild objGlobalSettings

预计:

<startMethod xmlns="http://localhost:62324/">
    <globalSettings>
        ...
    </globalSettings>
</startMethod>

但输出是:

<startMethod xmlns="http://localhost:62324/">
    <globalSettings xmlns="">
           ...
    </globalSettings>
</startMethod>

虽然名称空间声明具有属性的语法形式,但它们在语义上却大不相同。

通过在根元素上设置 xmlns="startMethod",您是说您希望该元素位于特定的命名空间中。您还没有说您希望子元素位于名称空间中,因此它不在一个名称空间中;并且因为它不在命名空间中,所以必须用 xmlns="" 序列化以取消父元素上的命名空间声明。

如果您希望所有元素都在同一个命名空间中,那么您应该在这个命名空间中创建它们。