VBScript遍历XML子节点并检索值
我有一位客户提供的以下XML,我需要从中提取如下项目:VBScript遍历XML子节点并检索值,xml,vbscript,Xml,Vbscript,我有一位客户提供的以下XML,我需要从中提取如下项目: 将每个部分视为单独的顺序 我可以访问,毫无问题地提取,并迭代每个部分中的值 但我看不出我是如何得到它下面的值的。如果有人能给我一些关于如何实现这一目标的建议,我将不胜感激,因为我已经尝试了一天多了 基本代码在XML下面 <?xml version="1.0"?> <Products_Root> <Products_IPN VendorID="11344" > <Cu
部分视为单独的顺序
我可以访问
,毫无问题地提取
,并迭代每个部分中的值
但我看不出我是如何得到它下面的值的。如果有人能给我一些关于如何实现这一目标的建议,我将不胜感激,因为我已经尝试了一天多了
基本代码在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>
您已经将选择语言设置为XPath,也许您也应该使用它。:)
选项显式
Dim xmlDoc、客户产品、产品
Dim绘图、CustomerProductName、ProductName
设置xmlDoc=CreateObject(“MSXML2.DOMDocument”)
xmlDoc.setProperty“SelectionLanguage”、“XPath”
xmlDoc.load“products.xml”
plot=“无值”
对于xmlDoc.SelectNodes中的每个CustomerProducts(“//CustomerProducts”)
CustomerProductName=CustomerProducts.getAttribute(“CustomerProductName”)
对于CustomerProducts.中的每个产品,选择节点(“./Products”)
ProductName=Products.getAttribute(“ProductName”)
MsgBox CustomerProductName&“-”&ProductName
下一个
下一个
发送帖子,必须记住;)要转换到较低的结构等,我是为每个进程使用
,还是可以用另一种方式引用它们,即
ASSET=“./Products/ProductSpecs”
我的答案显示了使用XPath的方法(SelectNodes()
)。如果不想在节点上循环,则不需要对每个节点使用。看看还有哪些其他方法和属性是可用的,这会很有帮助。Tomalak,谢谢你昨天的建议,它帮了很大的忙:)我更新了代码,但是它对于文本框来说太大了,我最好如何共享它?@Greybeard这里发布的代码没有上限。尽管如此,还是建议保持代码样本较小。没有人喜欢翻阅成吨的外国代码。
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