Как я могу удалить или избежать новых возвратов переноса строки в строке XML в XSL? - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть многострочное текстовое поле ASP, которое сохраняет пользовательский текст в базе данных. Когда я получаю данные, я сериализую их в xml и затем запускаю через XSL-преобразование для вывода моего HTML.

В моем преобразовании я передаю данные, определенные в текстовом поле, в функцию javascript через событие onclick элемента.

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

Я использую .NET XslCompiledTransform для преобразования. В XmlDocument есть свойство с именем PreserveWhiteSpace, по умолчанию установлено значение false, которое можно установить для удаления пробелов в XML. Это решает проблему, не позволяющую пользователю вводить разрывной текст, однако клиент хочет сохранить форматирование текста, который он вводит, если это вообще возможно.

Из того, что я знаю, .NET XslCompiledTransform преобразует новую строку возврата каретки в 

. Я считаю, что это символы, которые нарушают JavaScript.

Моей первой мыслью было убрать возврат каретки в xsl перед передачей строки в функцию javascript, но я не смог выяснить, для каких символов «искать» строку.

Полагаю, еще один вопрос: какие символы хранятся в SQL для возврата каретки из текстового элемента управления ASP.NET?

Если смотреть непосредственно на данные в базе данных, SQL, кажется, отображает этот символ как «неотображаемые» символы или (2 пустых поля).

Кто-нибудь имел опыт работы с подобными вещами?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Еще одна вещь, с которой я столкнулся ...

Изначально я хотел найти решение этой проблемы, которое не требовало бы «скомпилированного» изменения кода, т.е. способ сделать это в рамках xsl aka «краткосрочное исправление».

Сначала я попробовал это, но безуспешно ...

<xsl:variable name="comment" select="normalize-space(.\Comment)" />

Это, по сути, ничего не сделало, и я все еще получал ошибку JavaScript.

В конце концов, я попробовал это ...

<div onclick="Show('{normalize-space($comment)}'"></div>

Второе фактически сработало при удалении пустого пространства, таким образом, была устранена ошибка javascript. Это не было полным решением для моих требований, потому что оно решило только проблему ошибки javascript, однако эффективно предотвратило бы «взлом» страницы пользователем.

По этой причине этого может быть достаточно в качестве краткосрочного решения.

0 голосов
/ 07 февраля 2011

Я смог сделать это в коде, чтобы получить желаемые результаты:

using (StringWriter sWriter = new StringWriter())
        {

            xTrans.Transform(xDoc, xslArgs, sWriter);

            return sWriter.ToString().Replace("&#xD;&#xA;", "\\r\\n");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...