Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
顶级XML标记属性xmlns被二级标记继承-VBA_Xml_Vba_Excel - Fatal编程技术网

顶级XML标记属性xmlns被二级标记继承-VBA

顶级XML标记属性xmlns被二级标记继承-VBA,xml,vba,excel,Xml,Vba,Excel,在下面的代码中,如果我删除xmlns部分,只允许在Worklist的根元素上创建“version”作为属性,那么一切都正常。但是,只要添加xmlns属性,第二级元素就会继承xmlns=“www.someURL.com/XMLSchema”属性 如果我只有版本,一切都可以。如果我自己有xmlns,或者两者都有(如下面的代码所示),我就会遇到问题。我在代码下面包含了两个xml片段,一个包含下面的代码,另一个删除了xmlns代码 我可以通过不将其包含在XML创建中并在创建整个XML文档后将其作为字符串

在下面的代码中,如果我删除xmlns部分,只允许在Worklist的根元素上创建“version”作为属性,那么一切都正常。但是,只要添加xmlns属性,第二级元素就会继承xmlns=“www.someURL.com/XMLSchema”属性

如果我只有版本,一切都可以。如果我自己有xmlns,或者两者都有(如下面的代码所示),我就会遇到问题。我在代码下面包含了两个xml片段,一个包含下面的代码,另一个删除了xmlns代码

我可以通过不将其包含在XML创建中并在创建整个XML文档后将其作为字符串添加来避免这种情况,但我想了解如何防止这种情况发生(因为如果xmlns不是工作列表上的属性,则使用结果XML的程序会中断,如果xmlns是任何其他标记上的属性,则程序也会中断)

我还阅读了一些与XML名称空间的使用以及它们如何影响属性相关的其他堆栈溢出文章(和其他参考资料),我理解这些内容,但在本例中,我只需要能够将此单个属性添加到Worklist元素中

Dim xmlDoc As MSXML2.DOMDocument60
Set xmlDoc = New MSXML2.DOMDocument60

Dim Attribute1 As IXMLDOMAttribute, Element1 As IXMLDOMElement

Set RootNode = xmlDoc.createElement("Worklist")

Set Attribute1 = xmlDoc.createAttribute("xmlns")
Attribute1.value = "www.someURL.com/XMLSchema"
RootNode.setAttributeNode Attribute1
Set Attribute1 = Nothing

Set Attribute1 = xmlDoc.createAttribute("version")
Attribute1.value = "1.0"
RootNode.setAttributeNode Attribute1
Set Attribute1 = Nothing
XML片段

<Worklist xmlns="www.someURL.com/XMLSchema" version="1.0">
  <Options xmlns="" allow="false" delete="false" rename="false"/>
    <Templates xmlns="">
    </Templates>
    <Sequence xmlns="" name="aName"/>

<Worklist version="1.0">
  <Options allow="false" delete="false" rename="false"/>
    <Templates>
    </Templates>
    <Sequence name="aName"/>


谢谢你的阅读

使用
createElementNS()
/
createAttributeNS()
方法,它们为特定命名空间创建节点。将自动添加必要的命名空间定义

注意:如果使用前缀定义,则XML属性只能具有名称空间