2017-08-14 1 views
0

J'ai l'arborescence XML multi-niveau suivante que j'essaie d'analyser. Je peux facilement obtenir le premier niveau, mais n'arrive pas à comprendre comment obtenir les autres après beaucoup de recherches. En fin de compte ce dont nous avons besoin est une liste complète des données dans chaque niveau itératif sur chaque article ainsi que saisir l'identifiant de l'article. Quelqu'un peut-il m'aider s'il vous plaît?Analyse XML avancée dans ASP classique

XML:

<search> 
    <numresults>26707</numresults> 
    <pagesize>20</pagesize> 
    <articles> 
     <article id="998"> 
      <title>my title 1</title> 
      <url>www.google.com</url> 
      <attributes> 
       <performer> 
        <id>122</id> 
        <url>www.yahoo.com</url> 
        <name>Elvis</name> 
       </performer> 
      </attributes> 
     </article> 
     <article id="999"> 
      <title>my title 2</title> 
      <url>www.microsoft.com</url> 
      <attributes> 
       <performer> 
        <id>123</id> 
        <url>www.aol.com</url> 
        <name>Aerosmith</name> 
       </performer> 
      </attributes> 
     </article> 
    </articles> 
</search> 

Voici ce que je dois travailler pour cela le XML pour obtenir le niveau un:

Set objXML = CreateObject("Microsoft.XMLDOM") 
Set objEvents = CreateObject("Microsoft.XMLDOM") 

objXML.async = False 
objXML.setProperty "ServerHTTPRequest", true 
objXML.Load (sURL) 

'CaSe sensitive 
Set objEvents = objXML.getElementsByTagName("article") 

NumEvents = objEvents.length 'zero based 

Response.Write NumEvents 

c = 0 
Do Until c = NumEvents 

    Set objEventDetails = objEvents.item(c) 

    Title = Trim(objEventDetails.childNodes(0).text) 

    Response.Write Title & "<br>" 

    c = c + 1 

Loop 'main XML feed loop 

Set objEvents = Nothing 
Set objXML = Nothing 

Toute aide serait grandement appréciée !!

Répondre

0

Utilisez XPath au lieu d'explorer l'enfant suivant.

Voici un exemple

Set xml = CreateObject("Msxml2.DOMDocument") 
xml.Async = "False" 

xml.Load("search.xml") 

strReturn = "" 

for each ndArticle in xml.selectNodes("//article") 
    strReturn = strReturn + ndArticle.getAttribute("id") + vbCrLf 
    for each ndChild in ndArticle.selectNodes(".//") 
     if ndChild.nodeName <> "#text" then 
      strLast = ndChild.nodeName 
     else 
      strReturn = strReturn + strLast + "=" + ndChild.nodeTypedValue + "<br/>" + vbCrLf 
     end if 
    next 
next 

WScript.Echo strReturn 

Il crée

998 
title=my title 1<br/> 
url=www.google.com<br/> 
id=122<br/> 
url=www.yahoo.com<br/> 
name=Elvis<br/> 
999 
title=my title 2<br/> 
url=www.microsoft.com<br/> 
id=123<br/> 
url=www.aol.com<br/> 
name=Aerosmith<br/> 
+0

Lorsque je lance l'exemple ci-dessus sur l'exemple XML, je n'obtiens aucun résultat. ça ne va pas dans la boucle for. pas d'erreurs – Dennis

+0

Salut Dennis, vous devrez déboguer votre code pour comprendre ce qui se passe. Vérifiez que votre XML est valide, j'ai dû corriger l'échantillon original que vous avez posté. Je commencerais là. –

+0

Je sais - il y avait une faute de frappe que j'ai corrigé dans l'exemple xml ci-dessus. J'ai testé le xml, c'est valide. Cela a fonctionné pour vous? J'utilise le même xml que j'ai mis à jour ci-dessus et votre code * exact *. La chose étrange est que j'ai essayé le code semblable avec des noeuds choisis et cela n'a pas fonctionné. Je cours la dernière version IIS – Dennis

0

Si quelqu'un a ce problème, voici comment je l'ai résolu. Voir ce post:

how to solve "The download of the specified resource has failed" error?

Le dernier commentaire en bas a fonctionné pour moi. Il y avait un problème appelant mon URL du même répertoire que le script (je sais, totalement oublié - erreur de recrue), qui a ensuite jeté l'autre erreur de "Le téléchargement de la ressource spécifiée a échoué" menant à cette solution.

Je pense qu'il ya mon être une fonction de sécurité sur mon serveur bloquant le code de William de travailler au-dessus ....

merci pour l'aide William!