在VBA中解析XML显示数据

时间:2013-02-02 10:51:49

标签: xml vba xml-parsing

从我的研究中我已经能够在VBA中构建一个函数来解析XML并根据需要公开值。但是,有一个价值在逃避我。

<osgb:topographicMember>
     <osgb:TopographicArea fid='osgb1000000347753568'>
     <osgb:featureCode>10053</osgb:featureCode>
     <osgb:version>4</osgb:version>
     <osgb:versionDate>2006-03-15</osgb:versionDate>
     <osgb:theme>Land</osgb:theme>
     <osgb:calculatedAreaValue>46.099150</osgb:calculatedAreaValue>
     <osgb:changeHistory>
         <osgb:changeDate>2001-03-09</osgb:changeDate>
         <osgb:reasonForChange>New</osgb:reasonForChange>
     </osgb:changeHistory>
     <osgb:descriptiveGroup>General Surface</osgb:descriptiveGroup>
     <osgb:descriptiveTerm>Multi Surface</osgb:descriptiveTerm>
     <osgb:make>Multiple</osgb:make>
     <osgb:physicalLevel>50</osgb:physicalLevel>
     <osgb:polygon><gml:Polygon srsName='osgb:BNG'>
     <gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>290996.130,92420.290   290998.010,92415.010 291000.000,92415.720 291005.770,92417.770 291003.890,92423.040 291000.000,92421.660 290996.130,92420.290 </gml:coordinates>
     </gml:LinearRing>
     </gml:outerBoundaryIs>
     </gml:Polygon>
     </osgb:polygon></osgb:TopographicArea>
     </osgb:topographicMember>

我想获得的价值是fid ='osgb10000000347753568'

我可以获取并返回TopographicArea(使用xChild.baseName),但不是fid。

欢迎任何想法!

1 个答案:

答案 0 :(得分:0)

如果我正确理解输入,您需要打开TopographicArea节点并获取其Fid属性.text.NodeValue属性(取决于节点数据,哪个最适合)类型)而不是节点.baseName,即你应该使用这样的东西:

Set XMLDOC = CreateObject("MSXML2.DOMDocument")
.....
Set SubNode = XMLDOC.SelectNodes("//[list of parent nodes]/topographicMember/TopographicArea/")
fid = SubNode.Attributes.Item(0).NodeValue

也许我的符号错了,但关键是你应该使用.text.NodeValue属性。添加了XMLDOC的VBA Watch Window非常有用。祝你好运!