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

这是我的代码

<?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财产
物业FirstUser

在这个我怎么能读“PackageFormatVersion”为3? 即我知道一些价值是3,但是那个价值是怎么知道的?

我的意思是我必须select我想读的属性。

引用元素的.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,但是那个价值是怎么知道的?

您可以查看“本地”窗口中的对象,并检查其属性:

在这里输入图像说明

下面是一个替代方法,对于我来说比起使用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 
 Sub TestXML() Set Reference to Microsoft XML 6.0 Dim Init As Integer Dim xmlDoc As MSXML2.DOMDocument Dim elements As Object Dim el As Variant Dim Prop As String Dim NumberOfElements As Integer Dim n As IXMLDOMNode Init = 5 Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.Load ("C:\Users\Saashu\Testing.xml") Set elements = xmlDoc.getElementsByTagName("DTS:Property") Prop = xmlDoc.SelectSingleNode("//DTS:Property").Attributes.getNamedItem("DTS:Name").Text NumberOfElements = xmlDoc.getElementsByTagName("DTS:Property").Length For Each n In xmlDoc.SelectNodes("//DTS:Property") Prop = n.Attributes.getNamedItem("DTS:Name").Text Prop = Prop & " :: " & n.Text ActiveSheet.Cells(Init, 9).Value = Prop Init = Init + 1 Next End Sub 

这个代码仍然需要细化,因为我的要求是只显示一些像CreatorName和CreatorComputerName这些属性,而不是全部。

感谢David,在这个问题上帮助我。