Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мальенкий вопрос по msxml 
:(
    Опции темы
knut
Дата 6.7.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Добруый день.
Есть мальнекий вопрос
Есть xml я спарсил его.
Вопрос как мне задать т.е поменять значение конкретного нода?
Код

CComPtr<IXMLDOMDocument> XMLDoc;
      USES_CONVERSION;

 
      HRESULT hr = XMLDoc.CoCreateInstance(__uuidof(DOMDocument));
            // Load the XML document file...
            VARIANT_BOOL bSuccess = false;
    hr = XMLDoc->load(CComVariant(pszFileName),&bSuccess);
    CString str_;
    str_.Format("%d load is",hr);
    //1::AfxMessageBox(str_,MB_OK);
 

 
      CComPtr<IXMLDOMElement> elem;
      hr = XMLDoc->get_documentElement(&elem);
  
      CComPtr<IXMLDOMNodeList> nodeList;
      CComPtr<IXMLDOMNodeList> nodeList1;

      hr = elem->getElementsByTagName(CComBSTR(L"*"), &nodeList);
      hr = elem->getElementsByTagName(CComBSTR(L"*"), &nodeList1);
  
      
     
      CString str_value;
      CString str_name;
      //wstring str_value;
      //wstring str_name;    

      while(true)
      {
            CComPtr<IXMLDOMNode> node;
            CComPtr<IXMLDOMNode> node1;

        hr = nodeList->nextNode(&node);
            nodeList1->nextNode(&node1);
    
   
          if(node == 0)
          {
            break;
          }
          else
          {
               CComBSTR name,name1;
            node->get_text(&name);
            node1->get_nodeName(&name1);


            str_value = name.m_str;
            str_name  = name1.m_str;


            if(0 == strcmp("Account_Name",str_name))
            {
                str_account_name = str_value;
                                                                // вот я нашел интересую и мне надо изменить 
                                                                    значение Account_Name а 
            
            }



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
korbian
Дата 6.7.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 2
Всего: 14



Код

IXMLDOMNode::put_text()



--------------------
korbian ©
PM   Вверх
knut
Дата 6.7.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



korbian
Код

if(0 == strcmp("Account_Name",str_name))
{
  IXMLDOMNode::put_text("blabla ");??
}

но веть и старый текст тоже соxранит?или нет он просто заменит на содер. IXMLDOMNode::put_text() а ?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
korbian
Дата 6.7.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 2
Всего: 14



заменит
если я все правильно понял, то
Код

CComPtr<IXMLDOMDocument> XMLDoc;
      USES_CONVERSION;

 
      HRESULT hr = XMLDoc.CoCreateInstance(__uuidof(DOMDocument));
            // Load the XML document file...
            VARIANT_BOOL bSuccess = false;
    hr = XMLDoc->load(CComVariant(pszFileName),&bSuccess);
    CString str_;
    str_.Format("%d load is",hr);
    //1::AfxMessageBox(str_,MB_OK);
 

 
      CComPtr<IXMLDOMElement> elem;
      hr = XMLDoc->get_documentElement(&elem);
  
      CComPtr<IXMLDOMNodeList> nodeList;
      CComPtr<IXMLDOMNodeList> nodeList1;

      hr = elem->getElementsByTagName(CComBSTR(L"*"), &nodeList);
      hr = elem->getElementsByTagName(CComBSTR(L"*"), &nodeList1);
  
      
     
      CString str_value;
      CString str_name;
      //wstring str_value;
      //wstring str_name;    

      while(true)
      {
            CComPtr<IXMLDOMNode> node;
            CComPtr<IXMLDOMNode> node1;

        hr = nodeList->nextNode(&node);
            nodeList1->nextNode(&node1);
    
   
          if(node == 0)
          {
            break;
          }
          else
          {
               CComBSTR name,name1;
            node->get_text(&name);
            node1->get_nodeName(&name1);


            str_value = name.m_str;
            str_name  = name1.m_str;


            if(0 == strcmp("Account_Name",str_name))
            {
                //str_account_name = str_value;
                                                                // вот я нашел интересую и мне надо изменить 
                                                                // значение Account_Name а 
            HRESULT hr = node->put_text("bla-blaa-blaa");
            if(FAILED(hr))
            {
                throw std::exception("node->put_text()");
             } 
          hr = XMLDoc->save(CComVariant(pszFileName));
          if(FAILED(hr))
            {
                throw std::exception("XMLDoc->save(CComVariant(pszFileName))");
             }
}




--------------------
korbian ©
PM   Вверх
knut
Дата 6.7.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



korbian
 HRESULT hr = node->put_text("bla-blaa-blaa");
в параметр BSTR принемает а как строку ему передать?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Fazil6
Дата 6.7.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



 HRESULT hr = node->put_text(L"bla-blaa-blaa");
PM MAIL   Вверх
knut
Дата 6.7.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Fazil6
а если сишная строка?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
korbian
Дата 6.7.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 2
Всего: 14



Код

char* someAnsiString;
...
node->put_text(CComBSTR(someAnsiString));


Fazil6, спасибо за поправку.

Это сообщение отредактировал(а) korbian - 6.7.2007, 14:03


--------------------
korbian ©
PM   Вверх
Fazil6
Дата 6.7.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(knut @  6.7.2007,  13:52 Найти цитируемый пост)
а если сишная строка?

какая сишная строка? Ты в уникод сконвертировать не умеешь?
Код

#include <COMUTIL.H>


char t[] = "111";
_bstr_t bs(t);
 HRESULT hr = node->put_text(bs);

PM MAIL   Вверх
knut
Дата 6.7.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



народ а как мене новый нод добавить?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
knut
Дата 6.7.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Код

    bool resulte = false;
    CoInitialize(0);
  {
      
      CComPtr<IXMLDOMDocument> XMLDoc;
      USES_CONVERSION;

       hr = XMLDoc.CoCreateInstance(__uuidof(DOMDocument));
            // Load the XML document file...
            VARIANT_BOOL bSuccess = false;
    hr = XMLDoc->load(CComVariant(pszFileName_),&bSuccess);

      CComPtr<IXMLDOMElement> elem;
      HRESULT hr = XMLDoc->get_documentElement(&elem);
//                  вот здесь как добавить новый элемент
//<POP3_Port type="DWORD">00001bc6</POP3_Port>
  
      CComPtr<IXMLDOMNodeList> nodeList;




      hr = XMLDoc->save(CComVariant(pszFileName_));
  }
    

  ::CoUninitialize();



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
knut
Дата 6.7.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



вот мой xml
Цитата

<?xml version="1.0" encoding="utf-16" ?>
<MessageAccount>
    <Connection_Type type="DWORD">00000003</Connection_Type>
    <POP3_Server type="SZ">mail</POP3_Server>
    <POP3_User_Name type="SZ">asergey</POP3_User_Name>
    <POP3_Password2 type="BINARY">01000000d08c9ddf0115d1118c7a00c04fc297eb010000006a14f1068c5be849b66d5dec30cc66fe0000000002000000000003660000a8000000100000000b021874c38cba5a466be702c01de3f20000000004800000a000000010000000f9460460633853ae55573490c8127f3a200000004fc53baaf01cb57d01f7aeeac2ce03daa36b3f6a60d87b974648bd17f93326cd140000008c5ffd705aab6249e446807bbca6195934c8fba0</POP3_Password2>
    <POP3_Use_Sicily type="DWORD">00000000</POP3_Use_Sicily>
    <POP3_Prompt_for_Password type="DWORD">00000000</POP3_Prompt_for_Password>
    <SMTP_Server type="SZ">mail</SMTP_Server>
    <SMTP_Display_Name type="SZ">asergey</SMTP_Display_Name>
    <SMTP_Email_Address type="SZ">[email protected]</SMTP_Email_Address>
</MessageAccount>

мне надо запиxнуть в xml <POP3_Port type="DWORD">00001bc6</POP3_Port> как новый нод.

зделл я так но
Код

::AfxMessageBox(pszFileName_,MB_OK);
    bool resulte = false;
    CoInitialize(0);
  {
      
      CComPtr<IXMLDOMDocument> XMLDoc;
      USES_CONVERSION;
      HRESULT hr = XMLDoc.CoCreateInstance(__uuidof(DOMDocument));

       // Load the XML document file...
            VARIANT_BOOL bSuccess = false;
    hr = XMLDoc->load(CComVariant(pszFileName_),&bSuccess);

        CComPtr<IXMLDOMElement> elem;
        hr = XMLDoc->get_documentElement(&elem);
       
       CComBSTR bstrSS(L"MessageAccount");
       CComPtr<::IXMLDOMNode> spXMLNode;
       hr = XMLDoc->selectSingleNode(bstrSS,&spXMLNode);

        CComPtr<IXMLDOMNode> spXMLChildNode;
        hr = XMLDoc->createNode(CComVariant(NODE_ELEMENT),
                          CComBSTR("POP3_Port"),
                          NULL,
                          &spXMLChildNode);
        CComPtr<IXMLDOMNode> spInsertedNode;
        hr = spXMLNode->appendChild(spXMLChildNode,&spInsertedNode);

        CComQIPtr<IXMLDOMElement> spXMLChildElement;
        spXMLChildElement = spInsertedNode;

        hr = spXMLChildElement->setAttribute(CComBSTR(L"type"),CComVariant(L"DWORD"));

        hr = spXMLChildNode->put_text(L"00001bc6");
  


      hr = XMLDoc->save(CComVariant(pszFileName_));
  }
    

  ::CoUninitialize();


но конец я потерял т.е получил я такое без</MessageAccount>



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
knut
Дата 7.7.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



как добавить разобрался а вот как ыдалить не как не получается(элемент )
делаю так.
Код

CComPtr<IXMLDOMDocument> XMLDoc;
          USES_CONVERSION;

 
          HRESULT hr = XMLDoc.CoCreateInstance(__uuidof(DOMDocument));
                // Load the XML document file...
                VARIANT_BOOL bSuccess = false;
        hr = XMLDoc->load(CComVariant(path),&bSuccess);
                //hr = XMLDoc->load(CComVariant((*it)),&bSuccess);

            CComPtr<IXMLDOMElement> elem;
            hr = XMLDoc->get_documentElement(&elem);
  
          CComPtr<IXMLDOMNodeList> nodeList;
          CComPtr<IXMLDOMNodeList> nodeList1;

          hr = elem->getElementsByTagName(CComBSTR(L"*"), &nodeList);
          hr = elem->getElementsByTagName(CComBSTR(L"*"), &nodeList1);

          CString str_value;
          CString str_name;
          while(true)
          {
                CComPtr<IXMLDOMNode> node;
                CComPtr<IXMLDOMNode> node1;

            hr = nodeList->nextNode(&node);
                nodeList1->nextNode(&node1);
    
                                                                   ......
if(0 == strcmp("POP3_Port",str_name))
        {
                                                //вот здесь нашли то что интересует и xотим удалить нод
                                                 //но так не катет
            elem->removeChild(node);
            hr = XMLDoc->save(CComVariant(path));
            
        }




--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0882 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.