Доступ к значениям атрибутов в структуре XML — C с использованием MSXML6

#c #xml #msxml6

Вопрос:

У меня есть этот XML-файл ниже:

 <catalog>   
  <book id="bk101">
    <author> Gambardella, Matthew </author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
    <description>An in-depth look at creating applications with XML.</description>
  </book>
</catalog> 
 

Я хотел бы напечатать атрибут внутри book узла (это значение id , которое есть bk101 ), однако у меня возникли проблемы с использованием библиотеки MSXML6 для этого, и я хотел бы придерживаться его вместо перехода на Rapid и т. Д.

Ниже приведен мой код до сих пор:

 #include <stdio.h>
#include <tchar.h>
#include <windows.h>
#import <msxml6.dll> rename_namespace(_T("MSXML"))
#include<iostream>
#include<string>

int main(int argc, char* argv[]) {
    HRESULT hr = CoInitialize(NULL);
    if (SUCCEEDED(hr)) {
        try {
            MSXML::IXMLDOMDocument2Ptr xmlDoc;
            MSXML::IXMLDOMNodePtr bookholder;
            MSXML::IXMLDOMNodePtr author;
            MSXML::IXMLDOMNodePtr title;
            
            hr = xmlDoc.CreateInstance(__uuidof(MSXML::DOMDocument60),
                NULL, CLSCTX_INPROC_SERVER);
            // TODO: if (FAILED(hr))...
            
            if (xmlDoc->load(_T("books.xml")) != VARIANT_TRUE) {
                printf("Unable to load input.xmln");
            }
            else {
                printf("XML was successfully loadedn");

                xmlDoc->setProperty("SelectionLanguage", "XPath");
                MSXML::IXMLDOMNodeListPtr booklist = xmlDoc->selectNodes("/catalog/*");
                bookholder = booklist->Getitem(0);
                //printf(bookholder->Getxml() "n"); //works till here
                //printf(bookholder->; //what to do here to print attribute?
            }
        }
        catch (_com_erroramp; e) {
            printf("ERROR: %wsn", e.ErrorMessage());
        }
        CoUninitialize();
    }
    return 0;
}
 

Комментарии:

1. Вы уже прочитали IXMLDOMNode документацию ? IXMLDOMNode имеет attributes коллекцию.

2. Спасибо, Реми, я не смог найти хорошую документацию, касающуюся библиотеки MSXML, но это выглядит многообещающе!