: Ich bin XML mit VBA zu verwenden und ich versuche, XML-Antworten bilden die eBay-API wie diese zu analysieren:DOMDocument.SelectSingleNode Verwendung mit XML-Namespace zurückkehrend immer Null VBA
<?xml version="1.0"?>
<GetSingleItemResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2016-07-04T06:24:28.969Z</Timestamp>
<Ack>Success</Ack>
<Build>E963_CORE_APILW_17911290_R1</Build>
<Version>963</Version>
<Item>
<ItemID>232001428891</ItemID>
<EndTime>2016-07-13T22:06:14.000Z</EndTime>
<ViewItemURLForNaturalSearch>http://www.ebay.com/itm/WW2-Australian-P37-Entrenching-Tool-Cover-/232001428891</ViewItemURLForNaturalSearch>
<ListingType>Chinese</ListingType>
<Location>Pambula, New South Wales</Location>
</Item>
</GetSingleItemResponse>
Ich bin mit dem folgenden Code, um Knoten aus dem XML zu ziehen, was für andere zu funktionieren scheint, aber für mich geben die oDoc.SelectSingleNode
Zeilen immer Null
zurück. Ich habe versucht, den XML-Namespace manuell zu entfernen und diesen mit XML v.4.0-Objekten zurück in die Objekte zu geben, und habe fast jede XPath-Kombination ausprobiert, die mir einfällt. Der VBA-Code, den ich in einem eigenen Modul verwende ist:
Public Sub GeteBayItem()
'create the xml string
Dim itemXML As String
'Populate itemXML String with necessary values
'.................
'the http connection
Dim httpCnct As XMLHTTP60
Set httpCnct = New XMLHTTP60
'using POST synchronous call
httpCnct.Open "POST", "http://open.api.ebay.com/shopping?", False
'set the headers
'.........
Dim xmlDoc As FreeThreadedDOMDocument60
Set xmlDoc = New FreeThreadedDOMDocument60
xmlDoc.async = False
xmlDoc.LoadXML itemXML
'Make the call
httpCnct.send xmlDoc
Dim oNode As IXMLDOMNode
Dim oNode1 As IXMLDOMNode
Dim oDoc As DOMDocument60
Set oDoc = httpCnct.responseXML
Call oDoc.SetProperty("SelectionNamespaces", "xmlns:eBay='urn:ebay:eBLBaseComponents'")
'Debug.Print oDoc.XML
'Declaring a XML Doc
'Get the Item Number
Set oNode = oDoc.SelectSingleNode("/eBay:GetSingleItemResponse/eBay:Item/eBay:ItemID")
'Get the title
Set oNode1 = oDoc.SelectSingleNode("/eBay:GetSingleItemResponse/eBay:Item/eBay:Title")
'Set oNode = oDoc.SelectSingleNode(“/GetItemResponse”)
MsgBox (oNode.Text)
MsgBox (oNode1.Text)
Set oNode = Nothing
Set oNode1 = Nothing
Set oDoc = Nothing
End Sub
Der Code, um die Informationen aus den eBay-Servern ziehen funktioniert gut die einzigen Probleme Ich habe versucht, die Antwortwerte aus dem XML zu isolieren, aber ich eingeschlossen, falls das Problem irgendwo dort liegt. Letztendlich versuche ich nur den Wert eines Knotens wie ItemID = 232001428891
zu erhalten.
Vielen Dank im Voraus,
Wo ist das Namespacepräfix 'eBay' im XML-Dokument? – Parfait
@Parfait Ups tut mir leid, ich habe vergessen, es in das XML aufzunehmen. Es ist jetzt in der zweiten Zeile. –