2009-12-15 5 views
3

J'ai écrit un VBScript qui est censé transformer tous les nœuds d'un fichier XML, quelle que soit la profondeur de l'arborescence. Cela fait bien sauf que les noms de nœuds pour les nœuds qui ont 2 niveaux ou plus ne sont pas affichés. J'ai besoin des noms de noeud ainsi que des valeurs pour avoir des paires nom/valeur pour un traitement ultérieur par d'autres programmes. Quelqu'un peut-il m'aider s'il vous plaît à obtenir les noms de nœuds manquants affichés.Traverser tous les nœuds dans un fichier XML avec VBScript

Ci-dessous mon code:

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

et le 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> 
+0

Cela aiderait massivement si vous au courant que nous la sortie désirée N'ayez pas à imaginer ce que vous attendez et nous pouvons ignorer votre code et montrer comment vous auriez dû le faire. – AnthonyWJones

Répondre

6

S'il vous plaît, essayez ceci:

set nodes = xmlDoc.selectNodes("//*")  
for i = 0 to nodes.length 
    document.write(nodes(i).nodeName & " - " & nodes(i).text & "<br />") 
next 
+1

Merci Rubens. Cela m'a énormément aidé. Tout ce dont j'avais besoin était un coup de pouce dans la bonne direction. Tellement plus constructif que les commentaires stupides de AnthonyWJones. –

+1

D'une manière ou d'une autre il a eu un point: vous devriez vraiment apprendre à propos de XPath. XML devient encore plus drôle lorsque vous déposez la navigation DOM et commencez à sauter directement sur vos données. XPath semble effrayant au début, mais en deux jours ce sentiment disparaît =) –

+0

^deux jours^deux ans. Mais si vous voulez apprendre xpath, essayez http://xpathvisualizer.codeplex.com (Windows uniquement) – Cheeso

Questions connexes