2015-12-25 2 views
0

Я использую Xerces SAX для анализа XML-файла.xerces sax last html двойные кавычки в значении игнорируются

Значения между двумя котировками HTML неправильно обрабатываются, отображается только одна цитата, последняя из которых не указана. Пример:

<Rating_Text>&quot;a3&quot;</Rating_Text> 

обрабатывается как:

"a3 

В то время как она должна быть

"a3" 

Как исправить это, пожалуйста?

//... 
m_pXMLReader->setFeature(XMLUni::fgSAX2CoreValidation, true); 
//... 
void CXMLMsg::characters(
const XMLCh* const chars, 
const XMLSize_t  length 
) 
{ 
    char* szData = XMLString::transcode(chars); 
if(!isspace(*szData)) 
{ 
// 
} 
XMLString::release(&szData); 
} 

В режиме отладки, я проверил, что в «символах» последних двойных кавычках нет и длина правильно (оно не включает последнюю кавычку). Похоже, что Xerces игнорирует последние "

Если я заменю код html для двойных кавычек с реальными кавычками ", я получил все значение в обратном вызове ... так почему в случае использования HTML-кода для представления двойного котировки, Xerces решили разделить строку ??

+1

'"' будет '' ', а не' ''. И можете ли вы показать свой код, пожалуйста? –

+2

SAX может быть нечетным, вы уверены, что не просто получаете два или более вызовов обработчику событий 'characters', где второй вызов имеет вторую цитату? Я не думаю, что у SAX есть гарантия, что вы получите полные данные символа за один звонок. –

+1

@MartinHonnen Да, вы правы! Я только что проверил! но это очень неловко! Мне нужно получить всю строку (которая маленькая, как вы можете видеть) за один звонок! как предсказать, что строковое значение не завершено? о, черт возьми! – Aminos

ответ

0

Ну, я нашел идею, вложу часть обработки в EndElement обратного вызова, и в символы обратного вызова я просто сцепить строку, содержащую значение элемента;)

Смежные вопросы