使用XMLDOM的vb脚本

时间:2014-03-30 01:17:55

标签: vb.net vbscript

我正在尝试使用Microsoft XMLDOM从XML代码创建Excel工作簿。我对此非常陌生,并尝试过对此进行研究,但大多数答案都很难理解。以下是我的XML示例:

<scanmasterCollection>
<CustomerData>
    <companyName></companyName>
    <description></description>
</CustomerData>
  <collectionData>
    <ASH collectedFrom="testServer" version="3.03.00" devicename="tigger"> 
    <servercell>
       <object>
           <objectname>Server1</objectname> 
           <objecttype>servercell</objecttype> 
           <objectsn>456</objectsn> 
       </object>
    </servercell>
    <diskgroup>
       <object>
         <objectid>456</objectid> 
         <objectname>\Disk Groups\100</objectname> 
         <objecttype>diskgroup</objecttype>
         <totalstoragespacegb>4000</totalstoragespacegb>
       </object>
     </diskgroup>
  </ASH>
 </collectionData>
</scanmasterCollection>

我在vb脚本中使用它:

objSheet.Cells(iY,3).Value = objConfigXml.selectSingleNode
("//collectionData/ASH/collectedFrom").Attributes.getNamedItem("version").Text

objSheet.Cells(iY,4).Value = objConfigXml.selectSingleNode
("//collectionData/diskgroup/object").Attributes.getNamedItem
("totalstoragespacegb").Text

objSheet.Cells(iY,5).Value = objConfigXml.selectSingleNode
("//collectionData/serverCell/object").Attributes.getNamedItem("objectname").Text

我收到很多错误。我已经尝试了几个小时来改变上面的路径。

我需要返回以下值: 00年3月3日 4000 服务器1

你能用简单的语言解释一下如何做到这一点吗?类似的代码已经使用不同的XML运行,我正在尝试为此XML修改它。

1 个答案:

答案 0 :(得分:0)

所有XPath表达式都失败了。

  • &#34; // collectionData / ASH / collectedFrom&#34; - gatherFrom不是子节点,而是属性
  • &#34; // collectionData /磁盘组/对象&#34; - diskgroup是ASH的孩子
  • &#34; // collectionData / serverCell /对象&#34; - 对象的父级称为servercell(标记大小写)和ASH的子级

虽然ASH的属性为version,但totalstoragespacegbobjectname都不是属性。

为了帮助您入门:经过测试的表达

 WScript.Echo Join(Array( _
      objMSXML.selectSingleNode("//collectionData/ASH").Attributes.getNamedItem("version").text _
    , objMSXML.selectSingleNode("//collectionData/ASH/diskgroup/object/totalstoragespacegb").text _
    , objMSXML.selectSingleNode("//collectionData/ASH/servercell/object/objectname").text _
 ), vbCrLf)

输出:

3.03.00
4000
Server1