excel - 如何使用 VBA 读取 XML 属性到 Excel?

标签 excel vba attributes domdocument

这是我的代码..

   <?xml version="1.0" ?> 
   <DTS:Executable xmlns:DTS="www.microsoft.com/abc" DTS:ExecutableType="xyz">
       <DTS:Property DTS:Name="PackageFormatVersion">3</DTS:Property> 
       <DTS:Property DTS:Name="VersionComments" /> 
       <DTS:Property DTS:Name="CreatorName">FirstUser</DTS:Property> 
       <DTS:Property DTS:Name="CreatorComputerName">MySystem</DTS:Property>
   </DTS:Executable>

在这里,我可以使用“abc.baseName”读取元素,并使用“abc.Text”读取其值。 它给我的结果是

属性 3 属性(property)
属性第一用户

在此我如何将“PackageFormatVersion”读取为3?也就是说,我知道某个值是 3,但是我怎么知道这个值是多少??

我的意思是我必须选择我想要读取的属性。

最佳答案

引用元素的 .Text 属性或 .nodeTypeValue 属性:

Sub TestXML()
Dim xmlDoc As Object 'Or enable reference to Microsoft XML 6.0 and use: MSXML2.DOMDocument
Dim elements As Object
Dim el As Variant
Dim xml$
xml = "<?xml version=""1.0"" ?>"
xml = xml & "<DTS:Executable xmlns:DTS=""www.microsoft.com/abc"" DTS:ExecutableType=""xyz"">"
xml = xml & "<DTS:Property DTS:Name=""PackageFormatVersion"">3</DTS:Property>"
xml = xml & "<DTS:Property DTS:Name=""VersionComments"" />"
xml = xml & "<DTS:Property DTS:Name=""CreatorName"">FirstUser</DTS:Property>"
xml = xml & "<DTS:Property DTS:Name=""CreatorComputerName"">MySystem</DTS:Property>"
xml = xml & "</DTS:Executable>"

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
'## Use the LoadXML method to load a known XML string
xmlDoc.LoadXML xml
'## OR use the Load method to load xml string from a file location:
'xmlDoc.Load "C:\my_xml_filename.xml"

'## Get the elements matching the tag:
Set elements = xmlDoc.getElementsByTagName("DTS:Property")
'## Iterate over the elements and print their Text property
For Each el In elements
    Debug.Print el.Text
    '## Alternatively:
    'Debug.Print el.nodeTypeValue
Next

End Sub

我知道某个值是 3,但是我怎么知道这个值是多少?

您可以在“局部变量”窗口中查看对象,并检查它们的属性:

enter image description here

这里有一个替代方案,对我来说它比使用 GetElementsByTagName 更笨拙,但如果您需要遍历文档,您可以使用如下内容:

Sub TestXML2()
Dim xmlDoc As MSXML2.DOMDocument
Dim xmlNodes As MSXML2.IXMLDOMNodeList
Dim xNode As MSXML2.IXMLDOMNode
Dim cNode As MSXML2.IXMLDOMNode
Dim el As Variant
Dim xml$
xml = "<?xml version=""1.0"" ?>"
xml = xml & "<DTS:Executable xmlns:DTS=""www.microsoft.com/abc"" DTS:ExecutableType=""xyz"">"
xml = xml & "<DTS:Property DTS:Name=""PackageFormatVersion"">3</DTS:Property>"
xml = xml & "<DTS:Property DTS:Name=""VersionComments"" />"
xml = xml & "<DTS:Property DTS:Name=""CreatorName"">FirstUser</DTS:Property>"
xml = xml & "<DTS:Property DTS:Name=""CreatorComputerName"">MySystem</DTS:Property>"
xml = xml & "</DTS:Executable>"

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
'## Use the LoadXML method to load a known XML string
xmlDoc.LoadXML xml
'## OR use the Load method to load xml string from a file location:
'xmlDoc.Load "C:\my_xml_filename.xml"

'## Get the elements matching the tag:
Set xmlNodes = xmlDoc.ChildNodes
'## Iterate over the elements and print their Text property
For Each xNode In xmlDoc.ChildNodes
    If xNode.NodeType = 1 Then  ' only look at type=NODE_ELEMENT
        For Each cNode In xNode.ChildNodes
            Debug.Print cNode.nodeTypedValue
            Debug.Print cNode.Text
        Next
    End If
Next

End Sub

关于excel - 如何使用 VBA 读取 XML 属性到 Excel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19117667/

相关文章:

excel - 删除 Microsoft Excel 中特定标记之间的文本

excel - 查找工作表名称并获取工作表索引

excel - 如何创建多工作表 Excel jasper 报告?

vba - 将行复制并粘贴到新工作表中,并根据其他单元格值更改单元格值(月份)

excel - 您可以使用组合框的值来选择单元格范围吗

python - 如何将图像上传的标题更改为 Django 类中的名称

Python将Excel 2004 xml转换为csv(或excel)

excel - 来自具有两个值的单个单元格的小时计算器

仅当源属性存在时,XSLT 才向节点添加属性

javascript - 如何只获取 HTML 页面中的属性?