J'essaie de trouver un moyen d'analyser une balise xml où le contenu est transmis avec des balises CDATA pour certaines entrées, mais pas pour toutes. Par exemple, voici un exemple de contenu que je recevrais pour des données contenant des étiquettes CDATA. Mais il existe d'autres scénarios où les tags CDATA sont ignorés.Implémentation de IXmlSerializable pour le contenu contenant des données avec ou sans balises CDATA
<Data><![CDATA[ <h1>CHAPTER 2<br/> EDUCATION</h1>
<P> Analysis paragraph </P> ]]></Data>
Y at-il une façon élégante de détecter une certaine façon que, et mettre en œuvre la méthode ReadXml qui peut analyser les deux types d'entrée (avec ou sans CDATA)? Jusqu'à présent, mon implémentation de ReadXml() est la suivante, mais j'obtiens des erreurs d'analyse lorsque la balise CDATA est omise.
public void ReadXml(XmlReader reader)
{
bool isEmpty = reader.IsEmptyElement;
reader.ReadStartElement();
if (isEmpty)
{
_data = string.Empty;
}
else
{
switch (reader.MoveToContent())
{
case XmlNodeType.Text:
case XmlNodeType.CDATA:
_data = reader.ReadContentAsString();
break;
default:
_data = string.Empty;
break;
}
reader.ReadEndElement();
}
}
Pourriez-vous fournir un exemple de code défaillant? Si je passe en nocdata à votre fonction ReadXml cela fonctionne très bien. –
Son échec pour moi quand l'étiquette n'a pas de balises entourant cdata .. Bien sûr cela a fonctionné pour vous après que vous avez retiré la balise CDATA de l'échantillon que j'ai ci-dessus? Je reçois une erreur lors de l'exécution de reader.ReadEndElement() ... – jvtech
J'ai testé sur un plus simple. Vérifiez ma réponse pour l'échantillon de code. –