2012-08-22 62 views
4

我有一個客戶提供以下XML從中我需要提取類的物品:的VBScript通過XML子節點迭代和檢索值

  • <CustomerProductName>
  • <ProductName>
  • <ProductAssetName>

作爲單獨訂單處理每個<CustomerProducts>部分。

我可以得到<CustomerProducts>並提取<CustomerProductName>沒有問題,並遍歷每個部分中的值。

但我不明白我是如何得到它下面的值。如果有人能夠給我一些指示,告訴我如何實現這一點,我會一直努力嘗試一整天。

的基本代碼是XML低於

<?xml version="1.0"?> 
<Products_Root> 
    <Products_IPN VendorID="11344" > 
     <CustomerProducts CustomerProductName="Test" ProductCount="7"> 
      <Products ProductType="BOOK" ProductName="Donald" > 
       <ProductComponents ProductAssetName="Donald.pdf" /> 
       <ProductSpecs SpecClass="MEASUREMENT" SpecType="MARGINS" SpecValue="PER FILE"/> 
       <ProductSpecs SpecClass="OPERATION" SpecType="BIND" SpecValue="SADDLE"/> 
      </Products> 
      <Products ProductType="BOOK" ProductName="Duck"> 
       <ProductComponents ProductAssetName="Duck.pdf"/> 
       <ProductSpecs SpecClass="MEASUREMENT" SpecType="MARGINS" SpecValue="PER FILE"/> 
       </Products> 
     </CustomerProducts> 
     <CustomerProducts CustomerProductName="Test2" ProductCount="2"> 
      <Products ProductType="BOOK" ProductName="Micky"> 
       <ProductComponents ProductAssetName="Mouse.pdf" /> 
       <ProductComponents ProductAssetName="Mouse.pdf" /> 
       <ProductSpecs SpecClass="MEASUREMENT" SpecType="MARGINS" SpecValue="PER FILE"/> 
      </Products> 
      <CustomerProductSpecs SpecClass="OPERATION" SpecType="KITTING" SpecValue="SHRINKWRAP KIT"/> 
     </CustomerProducts> 
     <CustomerProducts CustomerProductName="Test3" ProductCount="6"> 
      <Products ProductType="BOOK" ProductName="Minnie"> 
       <ProductComponents ProductAssetName="Mouse" /> 
       <ProductSpecs SpecClass="MEASUREMENT" SpecType="MARGINS" SpecValue="PER FILE"/> 
      </Products> 
     </CustomerProducts> 
    </Products_IPN> 
</Products_Root> 

在這裏,我的VBScript代碼到目前爲止

Dim xmlDoc, objNodeList, plot 

Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
xmlDoc.setProperty "SelectionLanguage", "XPath" 
xmlDoc.load("E:\dropbox\Dropbox\Hobbs\Xerox Example Files\test.xml") 

Set objNodeList = xmlDoc.getElementsByTagName("CustomerProducts") 

plot="No Value" 
If objNodeList.length > 0 then 
    For each x in objNodeList 
     JobName=x.getattribute("CustomerProductName") 
     msgbox JobName 
    Next 
Else 
    msgbox chr(34) & "CustomerProducts" & chr(34) & " field not found." 
End If 

回答

6

你已經設置選擇語言的XPath,也許你應該使用它,太。 :)

Dim xmlDoc, CustomerProducts, Products 
Dim plot, CustomerProductName, ProductName 

Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
xmlDoc.setProperty "SelectionLanguage", "XPath" 
xmlDoc.load("E:\dropbox\Dropbox\Hobbs\Xerox Example Files\test.xml") 

plot="No Value" 

For Each CustomerProducts In xmlDoc.SelectNodes("//CustomerProducts") 
    CustomerProductName = CustomerProducts.getAttribute("CustomerProductName") 

    For Each Products In CustomerProducts.SelectNodes("./Products") 
    ProductName = Products.getAttribute("ProductName") 

    MsgBox CustomerProductName & " - " & ProductName 
    Next 
Next 
+0

託默勒格,感謝您的 – Greybeard

+0

發送後,必須記住,)
要惱火到下部結構等,我使用'對於Each'過程或可以我以另一種方式對它們進行了參考,例如
'ASSET =「./Products/ProductSpecs」
Greybeard

+0

我的答案顯示了使用XPath('SelectNodes()')的方式。如果你不想循環遍歷節點,那麼你不需要使用'For Each'。查看[文檔](http://msdn.microsoft.com/en-us/library/windows/desktop/ms761386(v = vs.85).aspx)以查明其他內容將對您有所幫助方法和屬性可用。 – Tomalak