msxml*.dll и C++
От: xinax Украина  
Дата: 08.08.05 18:51
Оценка:
Подскажите пожалуйста как создать простейший xml-документ с помощью библиотеки msxml в консольном приложении? Поиск по сайту и по Яндексу ответа не дал , а в MSDN нашел только примеры для C# и VB.
Заранее благодарен.

11.02.06 14:09: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: msxml*.dll и C++
От: _Dreamer Россия  
Дата: 09.08.05 02:09
Оценка:
Здравствуйте, xinax, Вы писали:

X>Подскажите пожалуйста как создать простейший xml-документ с помощью библиотеки msxml в консольном приложении? Поиск по сайту и по Яндексу ответа не дал , а в MSDN нашел только примеры для C# и VB.

X>Заранее благодарен.

Я с MSXML не слишком много работал, но вот можно так(в MSDN опять же все есть, тока надо искать) :

#import <msxml3.dll> raw_interfaces_only
#include <windows.h>

//...

HRESULT hr;
IXMLDOMDocument * pXMLDoc;
//...
hr = CoInitialize(NULL); 
hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, 
       IID_IXMLDOMDocument, (void**)&pXMLDoc);
// ну а дальше там - load, loadXML, или что вас интересует

//потом не забыть CoUninitialize();


можно курить раздел MSDN — XML Web Services->XML Core->XML General->SDK Documentation
Re: msxml*.dll и C++
От: Kluev  
Дата: 09.08.05 07:33
Оценка: -1
Здравствуйте, xinax, Вы писали:

X>Подскажите пожалуйста как создать простейший xml-документ с помощью библиотеки msxml в консольном приложении? Поиск по сайту и по Яндексу ответа не дал , а в MSDN нашел только примеры для C# и VB.

X>Заранее благодарен.

Простейший XML документ в консольном приложении лучще создавать с помошью fprintf
Или заюзать библиотеку TinyXml, чем иметь гемор с этим монстром msxml
Re[2]: msxml*.dll и C++
От: xinax Украина  
Дата: 09.08.05 17:54
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Простейший XML документ в консольном приложении лучще создавать с помошью fprintf

K>Или заюзать библиотеку TinyXml, чем иметь гемор с этим монстром msxml

К сожалению мне нужно использовать именно msxml , это требование тестового задания, я бы и сам не против просто написать нужный текст в файл.
Re[2]: msxml*.dll и C++
От: xinax Украина  
Дата: 09.08.05 17:59
Оценка:
Здравствуйте, _Dreamer, Вы писали:

_D>HRESULT hr;

_D>IXMLDOMDocument * pXMLDoc;
_D>//...
_D>hr = CoInitialize(NULL);
_D>hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
_D> IID_IXMLDOMDocument, (void**)&pXMLDoc);
_D>// ну а дальше там — load, loadXML, или что вас интересует
Именно это меня в основном и интересует...

_D>можно курить раздел MSDN — XML Web Services->XML Core->XML General->SDK Documentation

К сожалению в моем MSDN такого раздела нет
Re[3]: msxml*.dll и C++
От: Аноним  
Дата: 10.08.05 02:06
Оценка:
Здравствуйте, xinax, Вы писали:

_D>>// ну а дальше там — load, loadXML, или что вас интересует

X>Именно это меня в основном и интересует...
ну тогда почту скажи, могу выслать кое что.

_D>>можно курить раздел MSDN — XML Web Services->XML Core->XML General->SDK Documentation

X>К сожалению в моем MSDN такого раздела нет

курить тогда это и рядом с этим. инет то ведь есть ?
Re[4]: msxml*.dll и C++
От: _Dreamer Россия  
Дата: 10.08.05 02:07
Оценка:
Извиняюсь, предыдущий пост мой был.
Re: msxml*.dll и C++
От: Awaken Украина  
Дата: 11.08.05 07:42
Оценка:
Здравствуйте, xinax, Вы писали:

X>Подскажите пожалуйста как создать простейший xml-документ с помощью библиотеки msxml в консольном приложении? Поиск по сайту и по Яндексу ответа не дал , а в MSDN нашел только примеры для C# и VB.

X>Заранее благодарен.

невнимательно искал:

Program with DOM in C/C++ Using Smart Pointer Class Wrappers
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/21927d79-e0bd-4614-8cf5-45d851e68bd1.asp
Re[3]: msxml*.dll и C++
От: ssm Россия  
Дата: 11.08.05 14:59
Оценка:
Здравствуйте, xinax, Вы писали:


X>К сожалению мне нужно использовать именно msxml , это требование тестового задания, я бы и сам не против просто написать нужный текст в файл.


для начала:
#import <msxml4.dll>

//показать XML узла
void traceNode(MSXML2::IXMLDOMNode *node)
{
    assert(node);
    ::MessageBox(0, node->Getxml(), _T("XML"), 0);
}

int main()
{
    CoInitialize(NULL);

    try
    {
        //создали документ
        MSXML2::IXMLDOMDocument2Ptr xmlDoc(__uuidof(MSXML2::DOMDocument));
        traceNode(xmlDoc);

        //загрузка из файла
        xmlDoc->load("c:\\temp\\1.xml");
        traceNode(xmlDoc);


        //загрузка из строки
        xmlDoc->loadXML(L"<root attrib=\"text\"><a id = \"1\"/><a id = \"2\"/></root>");
        traceNode(xmlDoc);


        //выбрать узел "a" у которого аттрибут id = 2
        xmlDoc->setProperty("SelectionLanguage", "XPath");
        MSXML2::IXMLDOMNodePtr node1 = xmlDoc->selectSingleNode(L"root/a[@id = '2']");
        if(node1)
        {
            traceNode(node1);
        }        

        //получить root элемент
        MSXML2::IXMLDOMElementPtr rootElement = xmlDoc->GetdocumentElement();
        assert(rootElement != 0);
        traceNode(xmlDoc);

        
        //добавить новый элемент
        MSXML2::IXMLDOMElementPtr newElement = xmlDoc->createElement(L"newElement");
        assert(newElement != 0);
        rootElement->appendChild(newElement);        
        traceNode(xmlDoc);

        
        //установить аттрибут
        newElement->setAttribute(L"attribName", L"attribValue");
        traceNode(xmlDoc);


        //удалить все элементы с именем "a"
        MSXML2::IXMLDOMNodeListPtr nodesToDel = rootElement->selectNodes(L"a");
        assert(nodesToDel != 0);
        for(long i = 0, sz = nodesToDel->Getlength(); i < sz; ++i)
        {
            rootElement->removeChild(nodesToDel->Getitem(i));
        }
        traceNode(xmlDoc);


        //сохранить документ
        xmlDoc->save("c:\\temp\\2.xml");

                
    }
    catch (const _com_error &err)
    {
        ::MessageBox(0, err.ErrorMessage(), _T("Error!"), 0);
    }

    CoUninitialize();
    
}
Re[2]: msxml*.dll и C++
От: sensey_alex  
Дата: 10.02.06 23:52
Оценка:
Здравствуйте, _Dreamer, Вы писали:

_D>[ccode]

_D>#import <msxml3.dll> raw_interfaces_only
_D>#include <windows.h>

_D>//...


_D>HRESULT hr;

_D>IXMLDOMDocument * pXMLDoc;
_D>//...
_D>hr = CoInitialize(NULL);
_D>hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
_D> IID_IXMLDOMDocument, (void**)&pXMLDoc);
_D>// ну а дальше там — load, loadXML, или что вас интересует

_D>//потом не забыть CoUninitialize();


Да, только студия ругается на следующие вещи: CLSID_DOMDocument и еще говорит о несуществовании методов load, loadXML
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.