Подтвердить что ты не робот

Произошла ошибка при разборе 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

4b9b3361

Ответ 1

Просто замените их:

Недействительно в XML-элементах:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

  public static string UnescapeXMLValue(string xmlString)
  {
    if (xmlString == null)
        throw new ArgumentNullException("xmlString")

    return xmlString.Replace("&apos;", "'").Replace("&quot;", "\"").Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&");
  }

 public static string EscapeXMLValue(string xmlString)
  {

    if (xmlString == null)
        throw new ArgumentNullException("xmlString")

    return xmlString.Replace("'","&apos;").Replace( "\"", "&quot;").Replace(">","&gt;").Replace( "<","&lt;").Replace( "&","&amp;");
  }

Ответ 2

Это уже был дан ответ, но нашел более удобный способ добиться того же результата, выполнив это в .NET 4.5 с помощью метода Escape, как показано ниже:

var xmlWithEscapedCharacters = SecurityElement.Escape(xmlWithoutEscapedCharacters);

а затем просто подключите эту строку к генерируемому XML.

Ссылка: MSDN - метод SecurityElement.Escape

Ответ 3

Если ваш XML строится с конкатенацией строк, вам нужно будет его избежать. & должен стать &amp;, тогда как < и > должны стать &lt; и &gt; соответственно.

Могут быть и другие. Конечно, вы действительно должны использовать правильный XML-кодер, а не пытаться сделать это самостоятельно по многим причинам.

Ответ 4

Поскольку данные поступают из некоторой базы данных, проблема может быть исправлена ​​в контексте, описанном вами, но я бы настоятельно рекомендовал другой подход. Символ амперсанда не должен происходить в xml, в первую очередь, как обсуждалось здесь. Просьба пояснить, как генерируется xml и решить проблему.