2013-12-18 60 views
1

我正在处理来自excel 2013的xml输出,我已经设置了对XML v6库的引用,但是我没有得到我期望的结果。 这是我使用的代码:通过VBA继承父属性的子元素

Sub testXML() 

Dim dom, node, attr, PCMS, SendPCMS, header 

Set dom = CreateDom 
Set node = dom.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'") 
dom.appendChild node 
Set node = Nothing 

Set PCMS = dom.createElement("PCMS") 
Set attr = dom.createAttribute("xmlns") 
attr.Value = "MyNamespace" 
PCMS.setAttributeNode attr 
Set attr = Nothing 
dom.appendChild PCMS 

Set SendPCMS = dom.createElement("SendPCMSManifest") 
PCMS.appendChild SendPCMS 
Set header = dom.createElement("header") 
PCMS.appendChild header 

dom.Save "C:\Temp\DomTest.xml" 

End Sub 
Private Function CreateDom() 
Dim dom 
Set dom = New DOMDocument 
dom.async = False 
dom.validateOnParse = False 
dom.resolveExternals = False 
dom.preserveWhiteSpace = True 
Set CreateDom = dom 
End Function 

出于某种原因,该属性“的xmlns”也被应用到子元素(但只有属性名称,而不是值),按照以下的输出:

?xml version="1.0" encoding="UTF-8"?> 
PCMS xmlns="MyNamespace"> 
SendPCMSManifest xmlns=""/> 
header xmlns=""/> 
/PCMS> 

有人可以告诉我我要去哪里吗?元素 “SendPCMSManifest” & “报头” 不应该有 “的xmlns =” 中的节点名

编辑:试图获得表示

+0

类似问题:http://stackoverflow.com/questions/2079209/need-help-stopping-msxml-from-adding-namespaces –

回答

4
Sub testXML() 

Dim dom, node, PCMS 

    Set dom = CreateDom 
    Set node = dom.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'") 
    dom.appendChild node 
    Set node = Nothing 

    Set PCMS = dom.createNode(1, "PCMS", "MyNamespace") 
    dom.appendChild PCMS 

    PCMS.appendChild dom.createNode(1, "SendPCMSManifest", "MyNamespace") 
    PCMS.appendChild dom.createNode(1, "header", "MyNamespace") 

    Debug.Print dom.XML 

End Sub 

Private Function CreateDom() 
    Dim dom 
    Set dom = New DOMDocument 
    dom.async = False 
    dom.validateOnParse = False 
    dom.resolveExternals = False 
    dom.preserveWhiteSpace = True 
    Set CreateDom = dom 
End Function 

输出例如输出XML:

<?xml version="1.0"?> 
<PCMS xmlns="MyNamespace"><SendPCMSManifest/><header/></PCMS> 
+0

高蒂姆 - 正是医生的命令。非常感谢你 – Zabman