为什么属性也附加到子节点?
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=""
序列化以取消父元素上的命名空间声明。
如果您希望所有元素都在同一个命名空间中,那么您应该在这个命名空间中创建它们。
我想创建一个如下所示的 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=""
序列化以取消父元素上的命名空间声明。
如果您希望所有元素都在同一个命名空间中,那么您应该在这个命名空间中创建它们。