Я пытаюсь выяснить способ анализа XML-тега, в котором содержимое передается с тегами CDATA для некоторого ввода, но не для всех.Реализация IXmlSerializable для содержимого, содержащего данные с или без тегов CDATA
Например, приведен пример содержимого, который я получал бы для данных, содержащих теги CDATA. Но есть и другие сценарии, где теги CDATA ограничены.
<Data><![CDATA[ <h1>CHAPTER 2<br/> EDUCATION</h1>
<P> Analysis paragraph </P> ]]></Data>
Есть элегантный способ как-то определить, что и реализовать метод ReadXml, который может анализировать оба типа ввода (с или без CDATA)? Пока моя реализация ReadXml() выглядит следующим образом, но я получаю анализ ошибок, когда тег CDATA опущен.
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();
}
}
Не могли бы вы привести пример неисправного кода? Если я перейду в nocdata к вашей функции ReadXml, она работает нормально. –
Его недостаток для меня, когда тег не имеет привязанных к cdata тегов. Конечно, это сработало для вас после того, как вы удалили тег CDATA из образца, который у меня выше? Я получаю сообщение об ошибке при выполнении чтения.ReadEndElement() ... – jvtech
Я тестировал на более простой. Проверьте мой ответ на образец кода. –