VBScript 遍历 XML 子节点并检索值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12075314/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
VBScript iterating through XML child nodes and retrieving values
提问by Greybeard
I have the following XML provided by a customer from which I need to extract items like:
我有一个客户提供的以下 XML,我需要从中提取以下项目:
<CustomerProductName><ProductName><ProductAssetName>
<CustomerProductName><ProductName><ProductAssetName>
Treating each <CustomerProducts>section as a seperate order.
将每个<CustomerProducts>部分视为单独的订单。
I can get to <CustomerProducts>and extract the <CustomerProductName>without a problem and iterate over the value in each section.
我可以毫无问题地<CustomerProducts>提取<CustomerProductName>并迭代每个部分中的值。
But I can't see how I get to the values below it. If someone could someone give me some pointers as to how to achieve thIs would be gratefull as I have been trying for over a day now.
但我看不出我是如何得到它下面的值的。如果有人能给我一些关于如何实现这一点的指示,我将不胜感激,因为我已经尝试了一天多。
The basic code is below the XML
基本代码在 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>
And here my VBScript code so far
到目前为止,我的 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
回答by Tomalak
You already set the selection language to XPath, maybe you should useit, too. :)
您已经将选择语言设置为 XPath,也许您也应该使用它。:)
Option Explicit
Dim xmlDoc, CustomerProducts, Products
Dim plot, CustomerProductName, ProductName
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.load "products.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

