Произошла ошибка при разборе EntityName. Строка1, позиция 844
У меня есть следующее исключение из приведенного ниже кода.
Произошла ошибка при разборе EntityName. Line1, позиция 844.
Я пытался проанализировать набор данных, полученных из таблицы, в набор данных.
public DataSet BindMasterData(string xml)
{
DataSet ds = null;
try
{
ds = new DataSet();
TextReader txtReader = new StringReader(xml);
XmlReader reader = new XmlTextReader(txtReader);
ds.ReadXml(reader);
}
catch (Exception ex)
{
return new DataSet();
}
return ds;
}
Я выяснил причину исключения, но я не смог его решить. В этой конкретной ситуации строка (которая извлекается из БД) содержит специальный символ (&). Это вызывает исключение. Как я могу это решить. Любая помощь в этом была бы большой.
Спасибо и с уважением
Sebastian
Ответы
Ответ 1
Просто замените их:
Недействительно в XML-элементах:
" "
' '
< <
> >
& &
public static string UnescapeXMLValue(string xmlString)
{
if (xmlString == null)
throw new ArgumentNullException("xmlString")
return xmlString.Replace("'", "'").Replace(""", "\"").Replace(">", ">").Replace("<", "<").Replace("&", "&");
}
public static string EscapeXMLValue(string xmlString)
{
if (xmlString == null)
throw new ArgumentNullException("xmlString")
return xmlString.Replace("'","'").Replace( "\"", """).Replace(">",">").Replace( "<","<").Replace( "&","&");
}
Ответ 2
Это уже был дан ответ, но нашел более удобный способ добиться того же результата, выполнив это в .NET 4.5 с помощью метода Escape, как показано ниже:
var xmlWithEscapedCharacters = SecurityElement.Escape(xmlWithoutEscapedCharacters);
а затем просто подключите эту строку к генерируемому XML.
Ссылка: MSDN - метод SecurityElement.Escape
Ответ 3
Если ваш XML строится с конкатенацией строк, вам нужно будет его избежать.
&
должен стать &
, тогда как <
и >
должны стать <
и >
соответственно.
Могут быть и другие.
Конечно, вы действительно должны использовать правильный XML-кодер, а не пытаться сделать это самостоятельно по многим причинам.
Ответ 4
Поскольку данные поступают из некоторой базы данных, проблема может быть исправлена в контексте, описанном вами, но я бы настоятельно рекомендовал другой подход. Символ амперсанда не должен происходить в xml, в первую очередь, как обсуждалось здесь. Просьба пояснить, как генерируется xml и решить проблему.