Обход всех узлов в XML-файле с помощью VBScript

Я написал VBScript, который должен проходить через все узлы в файле XML, независимо от глубины дерева. Это хорошо, за исключением того, что имена узлов для тех узлов, которые имеют глубину 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>

и 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>

person rob dixon    schedule 15.12.2009    source источник
comment
Было бы очень полезно, если бы вы опубликовали желаемый результат, чтобы нам не приходилось представлять, чего вы ожидаете, и мы могли бы в значительной степени игнорировать ваш код и показать, как вы должны были это сделать.   -  person AnthonyWJones    schedule 15.12.2009


Ответы (1)


Пожалуйста, попробуйте это:

set nodes = xmlDoc.selectNodes("//*")    
for i = 0 to nodes.length
    document.write(nodes(i).nodeName & " - " & nodes(i).text & "<br />")
next
person Rubens Farias    schedule 15.12.2009
comment
Спасибо, Рубенс. Это мне очень помогло. Все, что мне было нужно, это толкнуть в правильном направлении. Намного более конструктивно, чем глупые комментарии Энтони Джонса. - person rob dixon; 15.12.2009
comment
Каким-то образом он понял: вам действительно стоит узнать о XPath. XML становится еще смешнее, когда вы отбрасываете DOM-навигацию и начинаете прыгать прямо на свои данные. XPath сначала кажется пугающим, но через два дня это чувство пройдет =) - person Rubens Farias; 15.12.2009
comment
^ два дня ^ два года. Но если вы хотите изучить xpath, попробуйте xpathvisualizer.codeplex.com (только для Windows) - person Cheeso; 24.12.2009
comment
Цикл For должен быть for i = 0 to nodes.length - 1 - person Pankaj Jaju; 14.11.2017