2014-11-24 41 views
1

在下面的代码中,如果我删除xmlns部分并且只允许将“版本”创建为Worklist的根元素上的属性,那么一切都可以。然而,只要我添加xmlns属性,那么每个第二级元素似乎都继承了属性xmlns =“www.someURL.com/XMLSchema”由第二级标记继承的顶级XML标记属性xmlns - VBA

如果我只有版本,一切正常。如果我自己拥有xmlns,或者如果我拥有这两个xmlns(如下面的代码),我会遇到问题。我在代码下面包含了两个x​​ml代码片段,一个代码如下,另一个代码去掉了xmlns代码。

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

我也读过一些与使用XML命名空间有关的其他堆栈溢出帖子(和其他资源)以及它们如何影响属性,我理解,但在这种情况下,我需要能够将此单一属性添加到仅工作列表元素。

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"/> 

感谢您的阅读!

回答

0

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

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