TinyXML анализ строки в формате XML возвращает NULL? - PullRequest
3 голосов
/ 27 мая 2011

Я пытаюсь использовать TinyXML для разбора строки в формате XML.Но указатель возврата всегда NULL.Я не уверен, какая часть кода установлена ​​неправильно.

TiXmlDocument docTemp;
const string strData = "<?xml version=\"1.0\" ?><Hello>World</Hello>";
const char* pTest = docTemp.Parse(strData.c_str(), 0 , TIXML_ENCODING_UTF8);
if(pTest == NULL){
    cout << "pTest is NULL" << endl;
}

Это всегда показывает 'pTest is NULL' Любая идея?

Спасибо большое!

Ответы [ 4 ]

4 голосов
/ 27 сентября 2012

Он должен возвращать 0 в случае ошибки, но похоже, что в TiXmlBase :: SkipWhiteSpace есть ошибка, если после закрывающей скобки нет символа, возвращается 0, но если есть пробел или \ r или \ n возвращает указатель Таким образом, у вас есть 2 варианта: добавить белый символ после закрывающей скобки или изменить следующие строки в начале SkipWhiteSpace:

if ( !p || !*p )
{
    return 0;
}

что-то вроде:

if ( !p )
{
   return 0;
}
if (!*p)
{
   return p;
}
3 голосов
/ 26 марта 2012
 if(pTest == NULL && docTemp->Error() ){
        cout << "pTest is NULL" << endl;
    }
1 голос
/ 11 августа 2011

Похоже, TiXMLDocument::Parse возвращает NULL в случае сбоя и указатель на символ рядом с закрывающей угловой скобкой, когда синтаксический анализ был успешным.

1 голос
/ 27 мая 2011

Похоже, что анализ возвращает ноль при успехе.

Можете ли вы увидеть, содержит ли docTemp.RootElement () допустимый элемент?

...