XML selectNodes using Classic ASP

asp-classicxml

XML problem that's got me stumped, but is probably very simple…

The XML is like:

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

And the code I would like to use is:

    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

But, I don't know how.

ALso, this could be a problem with, for example, the <images> and <links> tags.

Suggestions please?

Best Answer

The code I'm using is:

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

I hope someone else finds its useful!