【问题标题】:Top Level XML tag attribute xmlns being inherited by 2nd level tags - VBA顶级 XML 标记属性 xmlns 被二级标记继承 - VBA
【发布时间】:2014-11-24 07:49:21
【问题描述】:

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

的属性

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

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

我还阅读了一些与 XML 命名空间的使用以及它们如何影响属性相关的其他 Stack Overflow 帖子(和其他资源),我理解,但在这种情况下,我需要能够将这个单一属性添加到仅限工作清单元素。

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

感谢阅读!

【问题讨论】:

    标签: xml vba excel


    【解决方案1】:

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

    注意:如果定义了前缀,XML 属性只能有一个命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多