#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, но это выглядит многообещающе!