2013-06-24 2 views
1

Я никогда не работал с XML до и в то время как я продолжаю пытаться объединить вещи в сети, я никуда не могу (и более чем один!)Как извлечь XML-данные из API ISBNDB.com с помощью VBA?

Я пытаюсь настроить модуль vba, который будет запускается, когда кто-то нажимает кнопку в форме «Доступ». Функция будет использовать переданный ISBN #, а с ISBNDB.com API возвратит разные атрибуты книги.

Я уже получил свою строку доступа для API: https://isbndb.com/api/books.xml?access_key=NSOY388Z&results=texts&index1=isbn&value1=0007102968

Мне нужно знать, как идти об использовании данных для анализа, что возвращается в один из моих таблиц, такие как название, автор Издательство и т.д.

Вот визуальное дерево, возвращаемый моей доступа Строка:

Может кто-нибудь помочь мне с этим ? Как я уже сказал, я продолжаю пытаться объединить процесс вместе с сетью, и я не получаю абсолютно никуда.

+2

Попробуйте включить ссылку на «Microsoft XML, v6.0». Это дает вам хорошую объектную модель для работы вместо того, чтобы пытаться анализировать XML как обычные строковые данные. Я использовал его только один или два раза, поэтому я не могу получить гораздо большую помощь, но я должен начать с использования документа DOM для чтения XML, а не для синтаксического анализа строк. –

ответ

2

Вы можете загрузить документ XML DOM из своего URL-адреса, а затем использовать его методы для доступа к тексту из выбранных узлов. В следующем примере XPath идентифицирует узлы, но доступны и другие методы: getElementsByTagName; SelectNodes; и т.д.

Я написал этот образец с поздним связыванием. Возможно, вы захотите разработать раннюю привязку при изучении методов и свойств документа ... установите ссылку для Microsoft XML.

Dim strUrl As String 
Dim strXPathBase As String 

' early binding requires reference to Microsoft XML 
'Dim objDoc As MSXML2.DOMDocument 
'Set objDoc = New MSXML2.DOMDocument 

' late binding, no reference required 
Dim objDoc As Object 
Set objDoc = CreateObject("MSXML2.DOMDocument") 

strUrl = "https://isbndb.com/api/books.xml" & _ 
    "?access_key=NSOY388Z&results=texts" & _ 
    "&index1=isbn&value1=0007102968" 

objDoc.async = False 
objDoc.Load strUrl 

strXPathBase = "//ISBNdb/BookList/BookData/" 
Debug.Print "Title: " & _ 
    objDoc.SelectSingleNode(strXPathBase & "Title").Text 
Debug.Print "Publisher: " & _ 
    objDoc.SelectSingleNode(strXPathBase & "PublisherText").Text 

Set objDoc = Nothing