Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы потери пробела при загрузки из xml, последние пробелы и xml 
:(
    Опции темы
informn
Дата 22.9.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть xml файл и нужно загрузить из него данные.
Файл имеет примерно следующий формат:
Код

<LV3>
                <GEO>Am </GEO>
                <SFA>afdf  </SFA>
                <EXA>df df 1</EXA>
</LV3


Очень важны пробелы, что идут в конце каждой записи.

Используется примерно вот такой код:
Код

IXMLDOMDocument2Ptr pXMLDoc;
HRESULT hr;
pXMLDoc.CreateInstance( "msxml2.domdocument" );
//загрузка xml-файла
hr=pXMLDoc->load( CComVariant( sFileName.c_str() ));

MSXML2::IXMLDOMElementPtr RootElement;

MSXML2::IXMLDOMNodeListPtr ChildNodesOfRootElement;
MSXML2::IXMLDOMNodeListPtr ListOfArticles;
MSXML2::IXMLDOMNodeListPtr ListOfLevels;
MSXML2::IXMLDOMNodeListPtr ListOfNodes;
//MSXML2::IXMLDOMNodeListPtr ;

MSXML2::IXMLDOMNodePtr MainNode;
MSXML2::IXMLDOMNodePtr ArticleNode;
MSXML2::IXMLDOMNodePtr LevelNode;
MSXML2::IXMLDOMNodePtr Node;
MSXML2::IXMLDOMNodePtr ArticleVal;
//MSXML2::IXMLDOMNodePtr ;

MSXML2::IXMLDOMNamedNodeMapPtr ArticleAttributes;

int nListOfArticles;
int nListOfLevels;
int nListOfNodes;

_bstr_t textLevel;
_bstr_t text;
BSTR textBSTR;

!!! далее следует немного кода, где мы добираеся до нужного значения.



ListOfLevels=ArticleNode->childNodes;

nListOfLevels=ListOfLevels->length;

for (int iLevel=0; iLevel<nListOfLevels; iLevel++)
    {
            tmpNode.sLevel="";
        //считываем номер уровня
        LevelNode=ListOfLevels->item[iLevel];
        textLevel=LevelNode->nodeName;
        tmpNode.sLevel=textLevel;

        //загружаем список Node
        ListOfNodes=LevelNode->childNodes;
        nListOfNodes=ListOfNodes->length;
            
            for (int iNode=0; iNode<nListOfNodes; iNode++)
                {
                    tmpNode.sNode="";
                    tmpNode.sType="";
                    Node=ListOfNodes->item[iNode];
                    // в Node содержится сама запись, за исключением случаев с box.
                    
                    text=Node->nodeName;        //название поля
                    tmpNode.sType=text;
                    
                    Node->get_text(&textBSTR);    //само поле
                    
                    //text=Node->nodeValue;
                    text=(_bstr_t) Node->Gettext();
                    text=textBSTR;
                    tmpNode.sNode=text;
                    article.vNodes.push_back(tmpNode);



                }

В конце кода, происходит загрузка значений <GEO>Am </GEO> и т.д.
Так вот в этих значениях теряется последний пробел, а он очень нужен.
Как сделать так, чтобы не терялся этот пробел?

Компилятор Microsoft Visual C++ 2005   

PM MAIL   Вверх
_hunter
Дата 25.9.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



никак. это неправильный XML поэтому он неправильно парсится. для разбора этого файла нужно писать свой парсер.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
informn
Дата 25.9.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почему неправильный?
PM MAIL   Вверх
_hunter
Дата 26.9.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



потому как в правильном не должно быть лидирующих/завершающих пробелов...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bishop
Дата 28.9.2006, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

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



informn,
Вот здесь теряются завершающие пробелы:
Цитата(informn @  22.9.2006,  21:44 Найти цитируемый пост)
 Node->get_text(&textBSTR);    //само поле

А вот так не теряются:
Код

    VARIANT a;
    Node->get_nodeValue(&a);
    textBSTR = a.bstrVal;

PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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