MartyConnelly
martyconnelly at shaw.ca
Mon Dec 22 17:24:52 CST 2003
What I was doing was reading the xml file directly into the xmldom
parser, then selecting the nodes from the dom that I was interested in
via an xpath statement
like "//item/*". There are a couple of ways of doing this; one other is to use an xslt transform.
You might want to try Severxmlhttp, it is newer, uses a different stack and might be faster.
Dim xmlServerHttp As New Msxml2.ServerXMLHTTP40
Dim oNodeList As IXMLDOMNodeList
Dim onewsElement As IXMLDOMElement
xmlServerHttp.open "GET", "http://localhost/sample.xml", False
xmlServerHttp.send
' also need to check xmlserverhttp.parseerror
MsgBox xmlServerHttp.Status, xmlServerHttp.Statustext '200 is OK
MsgBox xmlServerHttp.responseXML.xml
onewsElement = srvXmlHttp.responseXML.selectSingleNode("//news/story1")
Erwin Craps - IT Helps wrote:
>Marty
>
>Your code is not exactly the solution for the problem I was confronted
>with, but you pointed me in the right direction.
>Is your code a, so called, XML parser?
>To convert the raw data into useable fields/values?
>
>Below code is what I created thanks to you (slow but it works).
>
>Dim objSrvHTTP As ServerXMLHTTP
>Set objSrvHTTP = New ServerXMLHTTP50
>With objSrvHTTP
> .Open "GET",
>"http://www.dummywebsite.com/xml/xmlonl.asp?custid=DummyCustID&prodid=78
>3662", False
> .Send
> Debug.Print .responseXML.XML
>End With
>Set objSrvHTTP = Nothing
>
>Great stuff XML....
>Pretty easyer than analysing a returned HTML page (been there, done
>that)
>
>Erwin
>
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Erwin Craps -
>IT Helps
>Sent: Monday, December 22, 2003 9:07 PM
>To: Access Developers discussion and problem solving
>Subject: RE: [AccessD] XML Http request from Access 2K2 or 2K3
>
>OK thx, I'll try to implement this.
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of MartyConnelly
>Sent: Monday, December 22, 2003 8:46 PM
>To: Access Developers discussion and problem solving
>Subject: Re: [AccessD] XML Http request from Access 2K2 or 2K3
>
>Here is how I grab an xml RSS news feed file from Microsoft and stick
>xml elements into a table It is a little lite on error handling and
>needs reference to XML 4.0, I run from Access97.
>If your files are large above a couple of megabytes, you may have to use
>the SAX parser.
>
>'LoadXMLJP "http://msdn.microsoft.com/vbasic/rss.xml","vbasic"
>'LoadXML "http://msdn.microsoft.com/rss.xml","Just Published"
>'LoadXML "http://msdn.microsoft.com/webservices/rss.xml","Web Services"
>'LoadXML "http://msdn.microsoft.com/vstudio/rss.xml","Visual Studio"
>'LoadXML "http://msdn.microsoft.com/netframework/rss.xml","Net
>Framework"
>'LoadXML "http://msdn.microsoft.com/vcsharp/rss.xml","VC Sharp"
>'LoadXML "http://msdn.microsoft.com/visualc/rss.xml", "VisualC"
>'LoadXML "http://msdn.microsoft.com/security/rss.xml", "Security"
>Public Sub LoadXMLJP(ByRef AdviserXML As String, strFeed As String)
>
> ' On Error GoTo ErrorHandler
>
> Const ACTION_NAME As String = "LoadXML"
>
> Dim oDOMDocument As MSXML2.DOMDocument40
> Dim oNodeList As IXMLDOMNodeList
> Dim oAdviserDetailsNode As IXMLDOMNode
> Dim oLowestLevelNode As IXMLDOMElement
> Dim objXMLDOMNamedNodeMap As IXMLDOMNamedNodeMap
>
> Dim sTempValue As String
> Dim msFPTAdviserID As Object
> 'temporary database
>Dim MyDb As Database
>Dim MyRs As Recordset
>Dim irec As Long
>Dim strTitleLink As String
>
> Set oDOMDocument = New MSXML2.DOMDocument40
>
> oDOMDocument.async = False
> oDOMDocument.validateOnParse = False 'assumes previous check for xml
>validity
> oDOMDocument.resolveExternals = False
> oDOMDocument.preserveWhiteSpace = True
>
> If Not oDOMDocument.Load(AdviserXML) Then
> MsgBox Err.number & Err.Description
>
> 'Call Err.Raise(ERR_UNABLE_TO_LOAD_ADVISER_XML, ,
>ERRDESC_UNABLE_TO_LOAD_ADVISER_XML)
> Exit Sub
> End If
> Debug.Print "grabbed box"
> Set oAdviserDetailsNode = oDOMDocument.documentElement
>
> Set objXMLDOMNamedNodeMap = oAdviserDetailsNode.Attributes
>
> 'msFPTAdviserID =
>objXMLDOMNamedNodeMap.getNamedItem("title").nodeValue
> Debug.Print "Set"
> Debug.Print "msFPT"
> Set oNodeList = oAdviserDetailsNode.selectNodes("//item/*")
>Set MyDb = CurrentDb
>Set MyRs = MyDb.OpenRecordset("RSSFeed") irec = 0 MyRs.AddNew
> For Each oLowestLevelNode In oNodeList
>
> sTempValue = oLowestLevelNode.Text
> ' Debug.Print oLowestLevelNode.nodeName & "-" & vbCrLf &
>oLowestLevelNode.Text
>
> Select Case oLowestLevelNode.nodeName
> Case "title"
>
> Debug.Print sTempValue
> MyRs!Title = sTempValue
> strTitleLink = sTempValue
> Case "PubDate"
> Debug.Print sTempValue
> MyRs!PubDate = sTempValue
> Case "description"
> Debug.Print sTempValue
> MyRs!fdescription = sTempValue
> Case "link"
> Debug.Print sTempValue
> 'MyRs!link = sTempValue
> 'need # format for clickable link
> MyRs!link = sTempValue & "#" & sTempValue & "#"
> End Select
> irec = irec + 1
> If irec = 4 Then
> 'check if duplicate also check if quote " in string
> Debug.Print DLookup("ID", "RSSFeed", "Title=" & Chr(34) &
>strTitleLink & Chr(34))
> If IsNull(DLookup("Title", "RSSFeed", "Title=" & Chr(34) &
>strTitleLink & Chr(34))) Then
> MyRs!feed = strFeed
> MyRs.Update
>
> End If
> MyRs.AddNew
> irec = 0
> End If
>
> Next
> Set MyRs = Nothing
> Set MyDb = Nothing
> Set oDOMDocument = Nothing
> Set oAdviserDetailsNode = Nothing
> Set objXMLDOMNamedNodeMap = Nothing
> Exit Sub
>
>ErrorHandler:
>
> ' Call NewError.Raise(Err.Number, Err.Source, Err.Description,
>'MODULE_NAME, ACTION_NAME, Erl)
>
>End Sub
>
>
>
>Erwin Craps - IT Helps wrote:
>
>
>
>>Euh, I don't think so...
>>I explain more detailed.
>>
>>My supplier allows me to constuct a url which returns a XML file in a
>>browser.
>>
>>For example
>>http://www.websitedummy.com/xml/xmlonl.asp?custid=MyCustID&prodid=78366
>>2 (Real Example but I replaced the website and cust id for obvious
>>reasons)
>>
>>As a (real) result I get an XML file looking like this in my browser.
>> <?xml version="1.0" ?>
>>- <RealData>
>> <MSG ID="0">ok</MSG>
>>- <ITEM>
>> <ID>783662</ID>
>> <DESC>LCD 1501-BK 15" TFT 0.297mm 60kHz 1024 x 768 TCO99 Black</DESC>
>> <PRICE CURRENCY="EUR">266,71</PRICE>
>> <QTY>0</QTY>
>> <DELDATE>07012004</DELDATE>
>> </ITEM>
>> </RealData>
>>
>>
>>I want to know if I can do this straight away from Access 2K2 or 2K3,
>>knowing that Access suports XML.
>>Isn't this what XML is all about?
>>Connecting anything to anything???
>>
>>Or am I to positive thinking?
>>
>>Well, I could resolve this with my http Active-X control I have, but I
>>always prefere to use native Access functionality above purchased
>>controls.
>>
>>The reason why I wanna do this is to startup my E-commerce website next
>>
>>
>
>
>
>>year.
>>I want to be able to update my article database automaticaly with stock
>>
>>
>
>
>
>>and purchase information, etc...
>>This database is used for my internal application and both E-commerce
>>website.
>>
>>
>>
>>Erwin
>>
>>
>>
>>
>>-----Original Message-----
>>From: accessd-bounces at databaseadvisors.com
>>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Charlotte
>>Foust
>>Sent: Monday, December 22, 2003 4:54 PM
>>To: Access Developers discussion and problem solving
>>Subject: RE: [AccessD] XML Http request from Access 2K2 or 2K3
>>
>>You can open a recordset on an xml file, if that's what you're looking
>>for.
>>
>>Charlotte Foust
>>
>>-----Original Message-----
>>From: Erwin Craps - IT Helps [mailto:Erwin.Craps at ithelps.be]
>>Sent: Monday, December 22, 2003 1:47 AM
>>To: Access Developers discussion and problem solving
>>Subject: [AccessD] XML Http request from Access 2K2 or 2K3
>>
>>
>>I never looked in to the XML support for Access.
>>Apparantly there is XML support, but the only thing I find is a
>>import/export filter.
>>
>>So I'm wundering if I can do a specific http xml request straight from
>>a form, in an easy way?
>>
>>
>>
>>Erwin Craps
>>
>>Zaakvoerder
>>
>>www.ithelps.be/jonathan
>>
>>
>>
>>This E-mail is confidential, may be legally privileged, and is for the
>>intended recipient only. Access, disclosure, copying, distribution, or
>>reliance on any of it by anyone else is prohibited and may be a
>>criminal offence. Please delete if obtained in error and E-mail
>>confirmation to the sender.
>>
>>IT Helps - I.T. Help Center *** Box Office Belgium & Luxembourg
>>
>>www.ithelps.be <http://www.ithelps.be/> * www.boxoffice.be
>><http://www.boxoffice.be/> * www.stadleuven.be
>><http://www.stadleuven.be/>
>>
>>IT Helps bvba* ** Mercatorpad 3 ** 3000 Leuven
>>
>>IT Helps * Phone: +32 16 296 404 * Fax: +32 16 296 405 E-mail:
>>Info at ithelps.be
>>
>>Box Office ** Fax: +32 16 296 406 ** Box Office E-mail:
>>Staff at boxoffice.be <mailto:figures at boxoffice.be>
>>
>>
>>_______________________________________________
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>_______________________________________________
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>_______________________________________________
>>AccessD mailing list
>>AccessD at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/accessd
>>Website: http://www.databaseadvisors.com
>>
>>
>>
>>
>>
>
>--
>Marty Connelly
>Victoria, B.C.
>Canada
>
>
>
>_______________________________________________
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com
>_______________________________________________
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com
>_______________________________________________
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com
>
>
>
--
Marty Connelly
Victoria, B.C.
Canada