VBScript遍历XML子节点并检索值

VBScript遍历XML子节点并检索值,xml,vbscript,Xml,Vbscript,我有一位客户提供的以下XML,我需要从中提取如下项目: 将每个部分视为单独的顺序 我可以访问,毫无问题地提取,并迭代每个部分中的值 但我看不出我是如何得到它下面的值的。如果有人能给我一些关于如何实现这一目标的建议,我将不胜感激,因为我已经尝试了一天多了 基本代码在XML下面 <?xml version="1.0"?> <Products_Root> <Products_IPN VendorID="11344" > <Cu

我有一位客户提供的以下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>

您已经将选择语言设置为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