2015-12-25 3 views
0

J'utilise Xerces SAX pour analyser un fichier XML.xerces sax guillemets doubles html dans une valeur est ignorée

Les valeurs entre deux guillemets HTML ne sont pas correctement analysées, une seule citation est affichée, la dernière ne l'est pas. Exemple:

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

est analysé comme:

"a3 

considérant qu'il devrait être

"a3" 

comment résoudre ce problème s'il vous plaît?

//... 
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); 
} 

En mode débogage, j'ai vérifié que « caractères » les derniers guillemets doubles ne sont pas présents et la longueur est correcte (il ne marche pas inclure le dernier guillemet). Si je remplace le code html par des guillemets doubles avec des guillemets réels, j'ai la valeur entière dans le rappel ... alors pourquoi dans le cas de l'utilisation du code HTML pour représenter le double citations, Xerces décident de diviser la chaîne ??

+1

'"' serait '' 'et non' '' '. Et pouvez-vous montrer votre code, s'il vous plaît? –

+2

SAX peut être étrange, êtes-vous sûr que vous n'obtenez pas simplement deux ou plusieurs appels au gestionnaire d'événements 'characters', où le deuxième appel a la deuxième citation? Je ne pense pas qu'il y ait une garantie avec SAX que vous obteniez les données de personnage complètes en un seul appel. –

+1

@MartinHonnen Oui, vous avez raison! Je viens de le vérifier !! mais c'est très embarrassant! J'ai besoin d'obtenir toute la chaîne (ce qui est petit comme vous pouvez le voir) en un seul appel! comment prévoir que la valeur de chaîne n'est pas complète? Oh mon Dieu ! – Aminos

Répondre

0

Eh bien, je trouve une idée, je vais mettre la partie de traitement en rappel endElement, et les personnages callback Je vais juste concaténer une chaîne contenant la valeur de l'élément;)