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

时间:2014-11-24 07:49:21

标签: xml vba excel-vba excel

在下面的代码中,如果我删除xmlns部分并且只允许"版本"要在Worklist的根元素上创建一个属性,一切都很好。但是,只要我添加xmlns属性,那么每个第二级元素似乎都会继承xmlns =" www.someURL.com/XMLSchema"

的属性

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

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

我还阅读了一些与XML命名空间的使用相关的其他Stack Overflow帖子(和其他资源)以及它们如何影响属性,我理解但在这个例子中我需要能够添加这个单一的属性仅限于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"/>

感谢阅读!

1 个答案:

答案 0 :(得分:0)

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

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