使用VBScript遍历XML文件中的所有节点

使用VBScript遍历XML文件中的所有节点,xml,vbscript,msxml,xmldom,Xml,Vbscript,Msxml,Xmldom,我已经编写了一个VBScript,它应该能够转换XML文件中的所有节点,而不管树的深度如何。除了不显示深度为2级或2级以上的节点的节点名称外,此操作效果良好。我需要节点名和值,以便我有名称/值对供其他程序进一步处理。有谁能帮我显示缺失的节点名称吗 下面是我的代码: <html> <head> </head> <body> <script type="text/vbscript"> Set xmlDoc=CreateObject("Mi

我已经编写了一个VBScript,它应该能够转换XML文件中的所有节点,而不管树的深度如何。除了不显示深度为2级或2级以上的节点的节点名称外,此操作效果良好。我需要节点名和值,以便我有名称/值对供其他程序进一步处理。有谁能帮我显示缺失的节点名称吗

下面是我的代码:

<html>
<head>
</head>
<body>

<script type="text/vbscript">
Set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("test.xml")
Dim objDocElem, strNode, strSubNode, xmlnn, xmlnv, xmlnc, xmldd, xmlfd, xmlfv

Set n_firstchild = xmldoc.documentElement.firstChild
Set p_node = n_firstchild.parentNode
Set pn_attribs = p_node.attributes
For Each pnAttr in pn_attribs
   xmlfd = xmlfd & pnAttr.name & chr(9)
   xmlfv = xmlfv & pnAttr.value & chr(9)
Next 

Set objDocElem=xmlDoc.documentElement

Set y = objDocElem.childNodes
i=0
Do While i < y.length 
If y(i).nodeType <> 3 Then
  If Isnull(y(i).childNodes(0).nodeValue) Then
     xmlnv = xmlnv & "Category" & chr(9)
  Else
     xmlnv = xmlnv & y(i).childNodes(0).nodeValue & chr(9)
  End If
  xmlnn = xmlnn & y(i).nodeName & chr(9)
  xmlnc = xmlnc + 1
  z=0
  Do While z < y(i).childNodes.length
    If y(i).childNodes(z).nodeType <> 3 Then
       xmlnc = xmlnc + 1
       xmlnn = xmlnn & y(i).childNodes(z).nodeName & chr(9)
       xmlnv = xmlnv & y(i).childNodes(z).text & chr(9)
    End If
    z=z+1
  Loop
End If
i=i+1  
Loop

document.write("form details: " & xmlfd & "<br />")
document.write("form values: " & xmlfv & "<br /><br />")
document.write("node names: " & xmlnn & "<br />")
document.write("node values: " & xmlnv & "<br />")
document.write("<br />node count: " & xmlnc & "<br />")

</script>
</body>
</html>

设置xmlDoc=CreateObject(“Microsoft.XMLDOM”)
xmlDoc.async=“false”
load(“test.xml”)
Dim对象进程、strNode、strSubNode、xmlnn、xmlnv、xmlnc、xmldd、xmlfd、xmlfv
设置n_firstchild=xmldoc.documentElement.firstchild
设置p_node=n_firstchild.parentNode
设置pn_attribs=p_node.attributes
对于pn_attribs中的每个pnAttr
xmlfd=xmlfd&pnAttr.name&chr(9)
xmlfv=xmlfv&pnAttr.value&chr(9)
下一个
设置objdoclem=xmlDoc.documentElement
设置y=objdoclem.childNodes
i=0
当我小于y长度时做
如果y(i).节点类型为3,则
如果为null(y(i).childNodes(0).nodeValue),则
xmlnv=xmlnv&“类别”和chr(9)
其他的
xmlnv=xmlnv&y(i).子节点(0).节点值&chr(9)
如果结束
xmlnn=xmlnn&y(i).节点名称和chr(9)
xmlnc=xmlnc+1
z=0
当z”)
document.write(“表单值:”&xmlfv&“

”) document.write(“节点名称:&xmlnn&“
”) document.write(“节点值:&xmlnv&“
”) 写入(“
节点计数:”&xmlnc&“
”)
以及XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<form penid="AJX-AAE-CRB-7P" submitted="2009-09-10 14:57:07" updated="2009-09-10 15:05:22" finalised="2009-09-10 15:59:48">
  <Forename>Russell</Forename>
  <Surname>Kilby</Surname>
  <HouseNumber>248</HouseNumber>
  <Letter>GRG</Letter>
  <Products>
    <WinSoftware>Product One</WinSoftware>
    <MacSoftware>Product Two</MacSoftware>        
    <LnxSoftware>Product Three</LnxSoftware>
    <Generic>
        <Product1>Speedo</Product1>
        <Product2>Switches</Product2>
        <Product3>BIOS</Product3>
        <TestOne>
            <Panel1>Front</Panel1>
            <Panel2>Back</Panel2>
            <Panel3>Middle</Panel3>
        </TestOne>
    </Generic>
    <Hardware>Fender</Hardware>
  </Products>
  <HouseName>Just Tea House</HouseName>
  <PostCode>B87 7DF</PostCode>
  <Insurer>ABC Cars</Insurer>
  <PolicyNumber>FDA 8D3JD7K</PolicyNumber>
  <Make>Ford</Make>
  <VehicleReg>EX51 CBA</VehicleReg>
  <DescriptionOfDamage>Big smash on the from</DescriptionOfDamage>
  <Estimate>1300</Estimate>
  <AlertManager>Yes</AlertManager>
</form>

拉塞尔
基尔比
248
GRG
产品一
产品二
产品三
Speedo
开关
基本输入/输出系统
正面
返回
中间的
挡泥板
只是茶馆
B87 7DF
ABC汽车
FDA 8D3JD7K
河流浅水处
EX51 CBA
大扣球
1300
对
请尝试以下操作:

set nodes = xmlDoc.selectNodes("//*")    
for i = 0 to nodes.length
    document.write(nodes(i).nodeName & " - " & nodes(i).text & "<br />")
next
set nodes=xmlDoc.selectNodes(“//*”)
对于i=0到nodes.length
document.write(节点(i).nodeName&“-”&节点(i).text&“
”) 下一个
如果您发布了所需的输出,这将非常有帮助,这样我们就不必想象您的期望是什么,我们可以基本上忽略您的代码,并展示您应该如何完成。谢谢Rubens。这对我帮助很大。我所需要的只是朝着正确的方向轻推。比AnthonyWJones的愚蠢评论更有建设性。不知何故,他得出了一个观点:你真的应该学习XPath。当您放弃DOM导航并开始直接跳到数据上时,XML变得更加有趣。XPath一开始似乎很可怕,但两天后这种感觉就会消失=)^2天^2年。但是如果您想学习xpath,请尝试(仅限Windows)For循环应该是
For i=0 to nodes.length-1