在VB 6.0中使用CreateAttribute函数无法删除CreateAttribute变量的第一个实例

时间:2016-05-17 17:23:22

标签: xml vb6

我的代码:

Set objnode = createnode OBJDOC, NOTHING, "TRANSMISSION")
createattribute objdoc, objnode, "xmlns", "http://www.irs.gov/efile"
Set objnode = createnode OBJDOC, objnode, "TransmissionHeader")
createattribute objdoc, objnode, "RecordCount", "1"

我的XML文件是什么样的:

<transmission xmlns="http://www.irs.gov/efile">
<transmissionHeader xmlns="" RecordCount="1">

我不知道为什么第二行会出现xmlns =“”。

2 个答案:

答案 0 :(得分:0)

请注意xmlns="..."默认命名空间。后代元素隐式地继承祖先默认命名空间(在某些特定条件下除外)。这与你的问题有什么关系?您期望的XML如下:

<transmission xmlns="http://www.irs.gov/efile">
<transmissionHeader RecordCount="1">

请注意,在上面的XML中,transmissionHeader元素位于名称空间"http://www.irs.gov/efile"中,与其父级相同。因此,您需要使用VB6找到在命名空间中创建XML元素的方法(不幸的是,我不熟悉VB6)。目前,您的代码在无命名空间(空命名空间)中创建transmissionHeader元素,这就是为什么默认命名空间声明在该元素中被重置为本地为空的原因:

<transmissionHeader xmlns="" RecordCount="1">

答案 1 :(得分:0)

我认为您为代码发布的内容可能会出现转录错误;我希望有开括号和括号括号,但我只看到函数调用的结束。此外,它看起来并不像VB6使用MSXML6,因为您正在调用一些全局createNode而不是在文档对象上调用它。不管怎么说,我会尽力回答。

有助于将XML文档视为树结构,并且恰好存在树的标准化序列化,其可以保存在文件中或通过因特网等发送。但是树中的每个节点都有一个命名空间。命名空间如何工作有很多,但在最简单的情况下,当序列化到文件时,默认命名空间(由“xmlns”属性表示)适用于其所在的元素及其后代元素。

您输出的结果表明根元素位于Request2命名空间中,但子元素位于空命名空间中,这使我认为您的代码创建了没有命名空间的子元素。然后,为了输出它,XML库需要在子节点上放置一个空的xmlns属性,以显示该节点在空命名空间中。

以编程方式操作文档树时,您不希望直接管理xmlns属性。标准MSXML6 createNode API具有http://www.irs.gov/efile参数,用于指定该节点的命名空间。我认为您正在寻找的是使用正确的namespaceURI在整个文档中创建所有元素节点。然后,当文档被写出到文件或Web服务器或任何地方时,XML库将自动发现在输出中表示命名空间的最紧凑方式是在根元素上使用xmlns属性来指定命名空间对于文档中的所有元素,并且在其他属性上没有单独的xmlns属性。