2009-09-16 5 views
2

qui me suis perplexe, mais est probablement très simple ...XML selectNodes à l'aide classique problème XML ASP

Le XML est comme:

<header> 
    <createdOn>16 Sep 2009</createdOn> 
    <createdBy>Jez</createdBy> 
</header> 
<agents> 
    <agent> 
      <agentDetails> 
        <agentName>text</agentName> 
        <agentTelephone>text</agentTelephone> 
      </agentDetails> 
      <properties> 
        <property> 
          <propertyid>number</propertyid> 
          <address> 
            <number>1</number> 
            <street>High St</street> 
            <postcode></postcode> 
            <country>UK</country> 
          </address> 
          <price> 
            <category>text</category> 
            <price>number</price> 
            <reference>text</reference> 
          </price> 
          <description> 
            <propertyType>House</propertyType> 
            <bedrooms>2</bedrooms> 
            <bathrooms>1</bathrooms> 
            <sleeps> 
            <briefDescription>text</briefDescription> 
            <addDescription>long-text</addDescription> 
            <floorSize> 
              <size>80</size> 
              <type>sq. mt</type> 
            </floorSize> 
            <bullets> 
              <bullet>No Of Bedrooms : 2</bullet> 
              <bullet>Condition : Habitable</bullet> 
              <bullet>Land Size (M2): 2,000</bullet> 
            </bullets> 
          </description> 
          <images> 
            <image> 
              <thumbnail>URL</thumbnail> 
              <image>URL</image> 
              <alttext></alttext> 
            </image> 
            <image> 
              <thumbnail>URL</thumbnail> 
              <image>URL</image> 
              <alttext></alttext> 
            </image> 
          </images> 
          <links> 
            <link> 
              <type>text</type> 
              <url>url</url> 
            </link> 
            <link> 
              <type>text</type> 
              <url>url</url> 
            </link> 
          </links> 
        </property> 
      </properties> 
    </agent> 
</agents> 

Et le code que je voudrais utiliser est:

Set NodeList = objXML.documentElement.selectNodes("agents/agent/properties/property") 
For Each Node In NodeList 
    'I want to be able to extract distinct fields here... 
    response.write Node.selectSingleNode("address/street") & "<br/>" 
    response.write Node.selectSingleNode("description/briefDescription") & "<br/>" 
Next 

Mais, je ne sais pas comment. De plus, cela pourrait être un problème avec, par exemple, les tags <images> et <links>.

Suggestions, s'il vous plaît?

+0

@Jez: Vous pouvez utiliser XSLT pour ce type de tâche. Prendre XML et cracher HTML est ce qui est bon. Prend un peu de la tête autour mais le code résultant est beaucoup plus propre et plus rapide que le code VBScript équivalent. – AnthonyWJones

+0

Je suis d'accord Anthony - J'ai utilisé XSLT avec succès dans le passé, mais dans ce cas, je n'essaie pas d'afficher les informations, je veux le schéma XML. J'essaie de créer une fonction pour mapper n'importe quel fichier XML aux champs SQL. – JezB

Répondre

2

Tout d'abord, l'exemple XML que vous avez publié n'est pas valide. Il manque un élément racine (ou a plusieurs éléments racine, selon votre point de vue). En outre, l'élément <sleeps> n'est jamais fermé. Je pense que ceux-ci pourraient être des fautes de frappe dans votre exemple?

Je ne suis pas sûr de ce que vous voulez dire par "Je veux être en mesure d'extraire des champs distincts ici." Pouvez-vous donner un exemple de la sortie que vous recherchez?

Sans plus d'informations, je peux suggère d'essayer une variante de celle-ci:

Dim NodeList, Node, SubNode 
'' # Note: Replace [root] with your actual root level element 
Set NodeList = objXML.documentElement.selectNodes("/[root]/agents/agent/properties/property") 
For Each Node In NodeList 
    '' # Do something useful... ?? Distinct fields?? 
    Set Node = Node.selectSingleNode("address/street/text()") 
    If Not Node Is Nothing Then 
     Response.Write Server.HTMLEncode(Node.nodeValue) & "<br />" 
    End If 
Next 

cette aide?

+0

C'est fantastique Chris! C'est la façon de référencer les nœuds que je recevais très mal - votre exemple de code a aidé. Je vous remercie! (BTW - oui, c'est une faute de frappe dans l'exemple Le document a une racine, mais il a été simplifié pour cela.) – JezB

+0

+1. Non seulement parce que c'est correct, mais parce qu'il utilise Server.HTMLEncode, si j'avais un sou pour chaque fois que j'ai vu que le code manquait. – AnthonyWJones

3

Le code J'utilise est:

Set NodeList = objXML.documentElement.selectNodes("agents/agent/properties/property") 
For Each Node In NodeList 
    Set AddrNode = Node.selectSingleNode("address/street/text()") 
    if not AddrNode Is Nothing then response.write AddrNode.nodeValue & "<br/>" 
    set AddrNode = nothing 

    Set AddrNode = Node.selectSingleNode("address/region/text()") 
    if not AddrNode Is Nothing then response.write AddrNode.nodeValue & "<br/>" 
    set AddrNode = nothing 

    For Each ImgNode In Node.selectNodes("images/image") 
     Set ThNode = ImgNode.selectSingleNode("thumbnail/text()") 
     if not ThNode Is Nothing then response.write ThNode.nodeValue & "<br/>" 
     set ThNode = nothing 
     Set ThNode = ImgNode.selectSingleNode("image/text()") 
     if not ThNode Is Nothing then response.write ThNode.nodeValue & "<br/>" 
     set ThNode = nothing 
     Set ThNode = ImgNode.selectSingleNode("alttext/text()") 
     if not ThNode Is Nothing then response.write ThNode.nodeValue & "<br/>" 
     set ThNode = nothing 
    next 
Next 

J'espère que quelqu'un d'autre trouve son utilité!

+0

Je l'ai fait. Merci. Actuellement en utilisant ASP classique pour consommer des données d'Amazon Web Services. Plus précisément, la recherche de produits. –