избежал xml внутри элемента xml - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть xml, что я получу от стороннего приложения, и структура выглядит следующим образом:

<root>
 <id>1</id>
 <data>&lt;node&gt;i like it&lt;node&gt;\n\r
  &lt;node&gt;i like it&lt;node&gt;</data>
</root>

Как вы можете видеть, есть экранированный xml внутри <data>, также в конце первой строки<data> есть новая строка \n\r и 2 пробела впереди на 2 строке в <data>.

Вот мой метод десериализации:

public static root Deserialize(string xml)
{
    System.IO.StringReader stringReader = null;
    try
    {
        stringReader = new System.IO.StringReader(xml);
        return ((root)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
    }
    finally
    {
        if ((stringReader != null))
        {
            stringReader.Dispose();
        }
    }
 }

После использования этого методазначение элемента данных:

"&lt;node&gt;i like it&lt;node&gt;\n  &lt;node&gt;i like it&lt;node&gt;"

А теперь мои вопросы:

Почему \r удален из строки данных?Есть ли способ удалить символы новой строки и пробелы другим способом, кроме простого string.replace();?

1 Ответ

1 голос
/ 28 ноября 2011

... значение элемента данных:

"&lt;node&gt;i like it&lt;node&gt;\n  &lt;node&gt;i like it&lt;node&gt;"

Нет, значение на самом деле

"<node>i like it<node>\n  <node>i like it<node>"

Почему \r удаляется из строки данных?

\r нормализовано. Разрывы строк в XML \n -только любое возникновение различных типов разрывов строк заменяется в процессе синтаксического анализа XML.

Есть ли способ удалить символы новой строки и пробелы другим способом, кроме простого string.replace();?

Вы можете regex-заменить \n$\s* пустой строкой:

Regex.Replace(data, @"\n\s*", String.Empty, RegexOptions.Multiline)
...