Метание XmlDocument «Произошла ошибка при разборе EntityName» - PullRequest
8 голосов
/ 03 октября 2011

У меня есть функция, в которой я передаю строку в виде параметров с именем filterXML, которая содержит «&» в одном из свойств.

Я знаю, что XML не распознает его, и это вызовет у меня ошибку. Вот мой код:

 public XmlDocument TestXMLDoc(string filterXml)
{
    XmlDocument doc = new XmlDocument();
    XmlNode root = doc.CreateElement("ResponseItems");

    // put that root into our document (which is an empty placeholder now)
    doc.AppendChild(root);

    try
    {
        XmlDocument docFilter = new XmlDocument();
        docFilter.PreserveWhitespace = true;

        if (string.IsNullOrEmpty(filterXml) == false)
            docFilter.LoadXml(filterXml); //ERROR THROWN HERE!!!

Что я должен изменить в своем коде, чтобы редактировать или анализировать filterXml? Мой filterXml выглядит так:

<Testing>
<Test>CITY & COUNTY</Test>
</Testing>

Я меняю строковое значение с & на &. Вот мой код для этого:

string editXml = filterXml;
    if (editXml.Contains("&"))
    {
        editXml.Replace('&', '&amp;');
    }

Но это дает мне ошибку внутри утверждения if: Слишком много литералов.

Ответы [ 3 ]

14 голосов
/ 03 октября 2011

Файл, показанный выше, не является правильно сформированным XML, поскольку амперсанд не экранирован.

Вы можете попробовать:

<Testing>
  <Test>CITY &amp; COUNTY</Test>
</Testing>

или

<Testing>
  <Test><![CDATA[CITY & COUNTY]]></Test>
</Testing>
2 голосов
/ 03 октября 2011

О втором вопросе: есть две подписи для String.Replace.Один, который принимает символы, другой, который принимает строки.Использование одинарных кавычек пытается создать символьные литералы - но «&» для C # действительно строка (в ней пять символов).

Работает ли она с двойными кавычками?

editXml.Replace("&", "&amp;");

Если вы хотите быть немного более консервативным, вы также можете написать код, чтобы убедиться, что за заменяемыми вами символами не следует ни один из

amp; quot; apos; gt; lt; or #

(но это все равно не будет идеальной фильтрацией)

1 голос
/ 03 октября 2011

Чтобы указать амперсанд в XML, следует использовать &amp;, поскольку знак амперсанда ('&') имеет особое значение в XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...