Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 23:36   #1
zigler
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 15
По умолчанию Пример чтения данных из XML-файла

Всем привет.
Хотелось бы увидеть небольшой пример на Visual C++ 6 с использованием данных из XML-файла (желательно msxml).
К примеру: имеется некий файл Hello.xml

Код:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
  <HELLO>Привет, народ!</HELLO>
</ROOT>
Как мне в нём получить строку из тега HELLO? Документации - горы, но реального примерчика - как не было так и нет(((
П.С. Любители гугла, знатоки мест нахождения документов и просто тролли - лесом
zigler вне форума Ответить с цитированием
Старый 18.12.2011, 01:17   #2
zigler
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 15
По умолчанию

Код почему-то выдает ошибки

Код:
#include <iostream.h>
#include <msxml.h>
#include <conio.h>

void main()
{
	// инициализация COM
	CoInitialize(NULL);
 
	// создаём XML-парсер
	CComPtr<IXMLDOMDocument> spXMLDOM;
	HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
 
	if ( FAILED(hr) )
		throw "Unable to create XML parser object";
	if ( spXMLDOM.p == NULL )
		throw "Unable to create XML parser object";
 
	// загружаем XML-документ
	VARIANT_BOOL bSuccess = false;
	hr = spXMLDOM->load(CComVariant(L"Hello.xml"), &bSuccess);
 
	if ( FAILED(hr) )
		throw "Unable to load XML document into the parser";
	if ( !bSuccess )
		throw "Unable to load XML document into the parser";
 
	// ищем XML-ноду
	CComBSTR bstrSS(L"ROOT/HELLO");
	CComPtr<IXMLDOMNode> spXMLNode;
	hr = spXMLDOM->selectSingleNode(bstrSS,&spXMLNode);
 
	if ( FAILED(hr) )
		throw "Unable to locate 'HELLO' XML node";
	if ( spXMLNode.p == NULL )
		throw "Unable to locate 'HELLO' XML node";

	CComVariant varValue(VT_EMPTY); // сюда будем читать
	hr = spXMLNode->get_nodeTypedValue(&varValue); // читаем
	if ( FAILED(hr) ) // нет ошибки?
		throw "Unable to retrieve 'HELLO' text";
 
	if ( varValue.vt == VT_BSTR ) // там строка?
	{
		// конвертируем полученную строку из BSTR в ANSI
		USES_CONVERSION;
		LPTSTR lpstrMsg = W2T(varValue.bstrVal);
		std::cout << lpstrMsg << std::endl;
	}
	else
	{
		// произошла ошибка
		throw "Unable to retrieve 'HELLO' text";
	}
}
Код:
--------------------Configuration: forschung1 - Win32 Debug--------------------
Compiling...
forschung1.cpp
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(11) : error C2065: 'CComPtr' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(11) : error C2065: 'IXMLDOMDocument' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(11) : error C2065: 'spXMLDOM' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(11) : warning C4804: '>' : unsafe use of type 'bool' in operation
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(11) : warning C4552: '>' : operator has no effect; expected operator with side-effect
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(12) : error C2228: left of '.CoCreateInstance' must have class/struct/union type
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(12) : error C2065: 'DOMDocument' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(16) : error C2228: left of '.p' must have class/struct/union type
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(21) : error C2227: left of '->load' must point to class/struct/union
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(21) : error C2065: 'CComVariant' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(29) : error C2065: 'CComBSTR' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(29) : error C2146: syntax error : missing ';' before identifier 'bstrSS'
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(29) : error C2065: 'bstrSS' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(30) : error C2065: 'IXMLDOMNode' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(30) : error C2065: 'spXMLNode' : undeclared identifier
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(30) : warning C4804: '>' : unsafe use of type 'bool' in operation
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(30) : warning C4552: '>' : operator has no effect; expected operator with side-effect
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(31) : error C2227: left of '->selectSingleNode' must point to class/struct/union
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(35) : error C2228: left of '.p' must have class/struct/union type
D:\Documents and Settings\Administrator\Desktop\cpptest\forschung1\forschung1.cpp(38) : error C2146: syntax error : missing ';' before identifier 'varValue'
.
.
.

forschung1.exe - 25 error(s), 4 warning(s)
в чем беда, не подскажите?
zigler вне форума Ответить с цитированием
Старый 18.12.2011, 02:05   #3
zigler
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 15
По умолчанию

Таак, добавил #include "stdafx.h", ошибок заметно поубавилось,
но теперь находит ошибки в msxml.h :wow:

Код:
Compiling...
forschung1.cpp
d:\program files\microsoft visual studio\vc98\include\msxml.h(26) : error C2146: syntax error : missing ';' before identifier 'IXMLElementCollection'
d:\program files\microsoft visual studio\vc98\include\msxml.h(26) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

forschung1.exe - 2 error(s), 0 warning(s)
zigler вне форума Ответить с цитированием
Старый 18.12.2011, 12:07   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

zigler

Как мне в нём получить строку из тега HELLO? Документации - горы, но реального примерчика - как не было так и нет(((

Этьо потому, что гоогле ввел новую жесткую политику поиска. Теперь результаты поиска не показываются без секретного пароля. На такие крайние меры пришлось пойти, потому что в последнее время развелось огромное количество ламеров, которые не могут найти элементарных вещей :sad: Когда их на форумах посылают в гоогле, они обижаются, и, в слезах, убегают жаловаться и во всем винить гоогле. Поэтому теперь, чтобы найти какие-либо данные в гоогле, сначала надо подтвердить доступ, громко назвав свою фамилию.

результаты превосходят все ожидания! например по данному вопросу гоогле сразу выдал вот что (публикую ответ в сокращенном варианте, а то вдруг у тебя нет доступа, а я тут секретные данные выкладываю. Полный ответ доступен только по паролю)

MSXML2::IXMLDOMDocumentPtr spXml(__uuidof(MSXML2::DOMDocument) );
spXml->load(...);

std::string val = (LPCSTR) (_bstr_t) spXml->selectSingleNode(L"/ROOT/HELLO/text()")->nodeValue;
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка чтения файла Umnik1 Общие вопросы Delphi 12 25.06.2013 22:57
сформировать xml-файл на основе другого xml-файла NieL Общие вопросы Delphi 2 21.12.2010 15:49
Загрузка данных в базу из xml файла Dien БД в Delphi 1 06.04.2010 20:27