Solved

Reference XML node by name

Posted on 2009-05-05
8
354 Views
Last Modified: 2012-05-06
How do you reference an xml node by name? I want to reference "author" specifically by name.
<document>
  <item>
    <title>Chief</title>
    <author>Larry X.</author>
    <price>45.00</price>
  </item>
 
  <item>
    <title>Captain</title>
    <author>Larry X.</author>
    <price>59.00</price>
  </item>
</document>
 
 
Set xmlObj = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
xmlObj.async = False
xmlObj.setProperty "ServerHTTPRequest", True
xmlObj.Load("http://domain.com/xml.xml")
If xmlObj.parseError.errorCode <> 0 Then
	Response.Write "Sorry, newsfeed is unavailable"
End If
Set xmlList = xmlObj.getElementsByTagName("item")
Set xmlObj = Nothing
For Each xmlItem In xmlList
	Response.Write "<br>"
	Response.Write xmlItem.getElementsByID("author") & "<br>"
Next
Set xmlList = Nothing

Open in new window

0
Comment
Question by:periker
  • 6
  • 2
8 Comments
 
LVL 25

Expert Comment

by:kevp75
ID: 24314530
try:

Set xmlObj = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
xmlObj.async = False
xmlObj.setProperty "ServerHTTPRequest", True
xmlObj.Load("http://domain.com/xml.xml")
If xmlObj.parseError.errorCode <> 0 Then
	Response.Write "Sorry, newsfeed is unavailable"
End If
Set xmlList = xmlObj.getElementsByTagName("item")
Set xmlObj = Nothing
For Each xmlItem In xmlList
	Response.Write "<br>"
	Response.Write xmlItem.getElementsByTagName("author").text & "<br>"
Next
Set xmlList = Nothing

Open in new window

0
 
LVL 25

Expert Comment

by:kevp75
ID: 24314539
or:

Set xmlObj = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
xmlObj.async = False
xmlObj.setProperty "ServerHTTPRequest", True
xmlObj.Load("http://domain.com/xml.xml")
If xmlObj.parseError.errorCode <> 0 Then
	Response.Write "Sorry, newsfeed is unavailable"
End If
Set xmlList = xmlObj.getElementsByTagName("item")
Set xmlObj = Nothing
For Each xmlItem In xmlList
	Response.Write "<br>"
	Response.Write xmlItem.Item(1).text & "<br>"
Next
Set xmlList = Nothing

Open in new window

0
 

Author Comment

by:periker
ID: 24316664
Your first options doesn't work
Object doesn't support this property or method: 'text'

Your second option won't work in my case because the fields may be in different orders depending on the xml file I am retrieving.
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 25

Expert Comment

by:kevp75
ID: 24317489
ok.  try this:


Set xmlObj = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
xmlObj.async = False
xmlObj.setProperty "ServerHTTPRequest", True
xmlObj.Load("http://domain.com/xml.xml")
If xmlObj.parseError.errorCode <> 0 Then
	Response.Write "Sorry, newsfeed is unavailable"
End If
Set xmlList = xmlObj.getElementsByTagName("item")
For i = 0 To xmlList.ChildNodes.Length - 1
	Response.Write "<br>"
	Response.Write xmlList.ChildNodes.Item(i).getElementsByTagName("author").text & "<br>"
Next
Set xmlList = Nothing
Set xmlObj = Nothing

Open in new window

0
 
LVL 25

Expert Comment

by:kevp75
ID: 24317499
hold on...gimme a sec to throw up a test page
0
 
LVL 25

Accepted Solution

by:
kevp75 earned 50 total points
ID: 24317711
here ya go:

test page: http://www.zipcm.com/temp.asp

code:

<%
Dim strXML : strXML = "<document><item><title>Chief</title><author>Larry X.</author><price>45.00</price></item><item><title>Captain</title><author>Larry X.</author><price>59.00</price></item></document>"
Set xmlObj = Server.CreateObject("Microsoft.FreeThreadedXMLDOM")
	xmlObj.async = False
	xmlObj.LoadXML(strXML) 'change back to .Load("http://domain.com/xml.xml")
	Set xmlList = xmlObj.selectNodes("//document")
		'Response.Write(IsObject(xmlList) & ":" & IsNull(xmlList))
		If IsObject(xmlList) And Not(IsNull(xmlList)) Then
			For Each objNode In xmlList
				For i = 0 To objNode.ChildNodes.Length - 1
					Set itemNode = objNode.ChildNodes(i)
						Response.Write("<strong>Author:</strong> " & itemNode.selectSingleNode("author").text & "<br />")
					Set itemNode = Nothing
				Next : i = Null
			Next : objNode = Null
		Else
			Response.Write("There are no items.")
		End If
	Set xmlList = Nothing
Set xmlObj = Nothing
%>

Open in new window

0
 

Author Closing Comment

by:periker
ID: 31578183
Perfect! Thanks!!
0
 
LVL 25

Expert Comment

by:kevp75
ID: 24319112
anytime
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I have helped a lot of people on EE with their coding sources and have enjoyed near about every minute of it. Sometimes it can get a little tedious but it is always a challenge and the one thing that I always say is:  The Exchange of information …
This demonstration started out as a follow up to some recently posted questions on the subject of logging in: http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_28634665.html and http://www.experts-exchange.com/Programming/…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question