à l'aide de VBscript pour extraire des données XML à partir des nœuds et des enfants

affiche la première fois ici et un peu newbie de VBscript. J'ai vraiment besoin de l'aide de vous les gars qui savent ce comme une seconde nature.
J'ai essayé d'inclure des informations pertinentes et j'espère ne pas trop.

J'ai essayé d'obtenir que cela fonctionne et je suis enfin après quelques jours de tentatives et d'une dizaine d'itérations de code. Je n'ai pas trouvé des exemples d'extraction de données à partir de plusieurs niveaux (rex et chidlren) dans le document XML.

J'ai été chargé de l'extraction de données à partir d'un fichier XML à l'aide de VBScript.
les éléments spécifiques sont les suivants: Année, Numéro de Compte, le Montant Dû, A en Souffrance? (vrai/faux) et Formaté Warrant.

Le format du fichier XML est comme ci-dessous, avec n'importe où de 1 000 à 10 000+ nœuds rempli de ces données avec beaucoup de 'divers' nœuds de là aussi bien.

  <BillData>
    <BillHeader>
      <Year>2010</Year>
      <misc></misc>
      <misc2></misc2>
      <misc3></misc3>
      <AcctNumber>0002566129</AcctNumber>
      <misc4></misc4>
      <PayAmounts>
         <CurrentAmountDue>133.06</CurrentAmountDue>
         <misc5></misc5>
      </PayAmounts>
      <misc6></misc6>
      <HasDelinquents>true</HasDelinquents>
      <WarrantInfo>
         <FormattedWarrantNumber>201115447</FormattedWarrantNumber>
      </WarrantInfo>
     </BillHeader>
   </BillData>

CurrentAmountDue et FormattedWarrantNumber ne peut pas toujours être présent. par cela, je ne veux pas dire qu'ils sont vides, mais la totalité de l'entrée de CurrentAmountDue peuvent être manquants, comme indiqué ci-dessous.

<PayAmounts>
   <misc5></misc5>
</PayAmounts>

J'ai besoin de l'extraire ces données à un fichier de texte séparé par des virgules. Si les données n'est pas présent, alors j'ai juste besoin d'insérer le comman, de sorte que lorsque la sortie est finalement importé dans Excel, il peut être noté pour être vide.

Le défi pour moi est de les obtenir dans les différents nœuds enfants et d'extraire les données correctement. Je n'arrive pas à sélectionner les différents nœuds correctement.

Voici quelques liens que j'ai utilisé comme référence, mais ne semble pas possible de le faire fonctionner.

http://technet.microsoft.com/en-us/magazine/2007.02.heyscriptingguy.aspx
cela semblait être la direction à suivre, mais j'obtiens une erreur "Test de Nœud Attend Ici":

  Set colNodes=xmlDoc.SelectNodes("/BillData/BillHeader/*" (Year | Account | CurrentAmountDue)")

J'ai trouvé un post sur la Pile, qui a proposé d'utiliser cette technique ci-dessous, mais il ne fonctionne pas pour moi une fois que j'aurai passé deux valeurs, alors que j'ai plus. Je suppose que cela est dû à la CurrentAmountDue et FormattedWarrantNumber sont aux niveaux les plus profonds dans le XML pour ainsi dire.

  strQuery = "/BillData/BillHeader/" & _
  "[name()='Year' or name()='AccountNumber' or name()='HasDelinquents' or name()='CurrentAmountDue' or name()='FormattedWarrantNumber']"

À ma grande surprise, je suis en mesure d'obtenir ce retour à certaines valeurs, mais pas tous sur la même boucle donc ma sortie est désactivée (première ligne affichera seulement une année, la dernière ligne est manquante) et est juste une virgule.

   strQuery = "/BillData/BillHeader/*"
   Set colNodes=xmlDoc.selectNodes(strQuery)
   For Each objNode in colNodes 

   ' some lame if then statements that get the values, but this can't be the correct approach!
   ' these three items (Year, Account and HasDelinquents are under each BillHeader as far as I can tell, but this doesn't seem to be the most effective method.
     if objNode.nodeName = "Year" then strYear = objNode.text  
     if objNode.nodeName = "Account" then strAccount = objNode.text 
     if objNode.nodeName = "HasDelinquents" then strHasDelq = objNode.text 

          for each CurrentAmt in objNode.SelectNodes("./CurrentAmountDue")
                strCurrAmt = CurrentAmt.text
                ' i finally got a value here when I use msgbox to view it.'
          next

          for each WarrantNum in objNode.SelectNodes("./FormattedWarrantNumber")
                strWarNum = WarrantNum.text   
                ' getting this value also when I use msgbox to view it.
          next
   next

De sorte que vous pouvez voir mes tentatives sont vaines.

J'ai aussi essayé d'insérer cette ligne ci-dessous. Je l'ai mis juste avant la PROCHAINE, mais il ne fonctionne pas comme prévu. J'ai également essayé d'insérer quelques SI-Alors déclarations pour vérifier les valeurs dans l'Année et Compte avant d'écrire le fichier, puis l'effacement de l'valeurs après l'écriture du fichier. Qui a presque fonctionné, mais ma première ligne et les dernières lignes ne sont pas productrices de données correctes.

     objFileToWrite.WriteLine(strYear & "," & strAccount & "," & strCurrAmt & "," & strHasDelq & "," & strWarNum)

ok, maintenant que vous avez eu un fou rire avec mon préhistorique tentative de codage, pouvez-vous me prêter un coup de main? 🙂
laissez-moi savoir si quelque chose d'autre est nécessaire.
merci pour le temps investi. Je sais que certains d'entre vous pourraient le coup avec facilité.

InformationsquelleAutor Nick | 2013-10-24