Я должен сохранить содержание что содержащий новые строки в некоторых атрибутах XML, не текст. Метод должен быть выбран так, чтобы я был в состоянии декодировать его в XSLT 1.0/ESXLT/XSLT 2.0
Каков лучший метод кодирования?
Предложите/дайте некоторые идеи.
В совместимом DOM API ничего не нужно делать. Просто сохраните актуальные символы новой строки в атрибуте, API самостоятельно правильно их закодирует (см. Canonical XML spec, раздел 5.2).
Если Вы сделаете свою собственную кодировку (т.е. замените \n
на
перед сохранением значения атрибута), API снова закодирует Ваш ввод , в результате чего в XML-файле появится
.
В итоге, значение строки сохраняется дословно. Вы получаете то, что вставили, не нужно вмешиваться.
Однако... некоторые реализации не совместимы. Например, они кодируют символы &
в значения атрибутов, но забывают о символах новой строки или табуляции. Это ставит Вас в проигрышную позицию, так как Вы не можете просто заменить новую строку на
заранее.
Эти реализации сохранят символы новой строки некодированными, например:
<xml attribute="line 1
line 2" />
При разборе такого документа буквальные новые строки в атрибутах нормализуются в единое пространство (опять же, в соответствии со спецификацией) - и, таким образом, они теряются.
Сохранение (и удержание!) новых строк в атрибутах в этих реализациях невозможно.
Вы можете использовать сущность
для представления новой строки в атрибуте XML.
можно использовать для представления возврата каретки. CRLF в стиле windows может быть представлен как
.
Это легальный синтаксис XML. См. Спецификация XML для получения более подробной информации.
.