Как я могу удалить или избежать новых возвратов переноса строки в строке XML в XSL?
У меня есть многострочное текстовое поле ASP, которое сохраняет пользовательский текст в базе данных. Когда я получаю данные, я сериализую их в xml, а затем запускаю через XSL-преобразование для вывода моего HTML.
В рамках моего преобразования я передаю данные, определенные в текстовом поле, в функцию javascript через событие onclick элемента.
Проблема, с которой я сталкиваюсь... когда пользователь вводит возврат каретки в текстовое поле и сохраняет его в базе данных, при загрузке страницы генерируется ошибка JavaScript.
Я использую.NET XslCompiledTransform
сделать преобразование. Есть недвижимость на XmlDocument
называется PreserveWhiteSpace
По умолчанию установлено значение false, которое можно настроить для удаления пробелов в XML. Это решает проблему, не позволяющую пользователю вводить разрывной текст, однако клиент хочет сохранить форматирование текста, который он вводит, если это вообще возможно.
Из того, что я знаю, .NET XslCompiledTransform
трансформирует возврат каретки - новую строку в 

, Я считаю, что это символы, которые нарушают JavaScript.
Моей первой мыслью было убрать возврат каретки в xsl перед передачей строки в функцию javascript, но я не смог выяснить, какие символы нужно "искать" в строке.
Я предполагаю, что другой вопрос заключается в том, какие символы хранятся в SQL для возврата каретки из текстового элемента управления ASP.NET?
Смотря непосредственно на данные в базе данных, SQL, кажется, отображает символ как "неотображаемые" символы или (2 пустых поля).
Кто-нибудь имел опыт работы с такими вещами?
2 ответа
Я смог сделать это в коде, чтобы получить желаемые результаты:
using (StringWriter sWriter = new StringWriter())
{
xTrans.Transform(xDoc, xslArgs, sWriter);
return sWriter.ToString().Replace("
", "\\r\\n");
}
Еще одна вещь, с которой я столкнулся...
Изначально я хотел найти решение этой проблемы, которое не требовало бы "скомпилированного" изменения кода, т.е. способ сделать это в рамках xsl, иначе говоря, "краткосрочного исправления".
Я попробовал это первым и не увенчался успехом...
<xsl:variable name="comment" select="normalize-space(.\Comment)" />
Это по существу ничего не сделало, и я все еще получал ошибку JavaScript.
В конце концов, я попробовал это...
<div onclick="Show('{normalize-space($comment)}'"></div>
Второе фактически сработало при удалении пустого пространства, таким образом, была устранена ошибка JavaScript. Это не было полным решением для моих требований, потому что это только решило проблему ошибки javascript, однако, это эффективно предотвратило бы "взлом" страницы пользователем.
По этой причине этого может быть достаточно в качестве краткосрочного решения.