Как сохранить новые строки в атрибуте XML?
Мне нужно сохранить содержимое, содержащее новые строки в некоторых атрибутах XML, а не текст. Метод должен быть выбран так, чтобы я мог декодировать его в XSLT 1.0/ESXLT/XSLT 2.0
каков наилучший метод кодирования?
прошу подсказать/дать некоторые идеи.
3 ответа:
в совместимом DOM API вам ничего не нужно делать. Просто сохраните фактические символы новой строки в атрибуте, API будет правильно кодировать их самостоятельно (см. каноническая спецификация XML, раздел 5.2).
если вы делаете свою собственную кодировку (т. е. замена
\n
С
перед сохранением значения атрибута), API будет кодировать ваш ввод снова, в результате

в XML-файле.нижняя строка, строковое значение сохраняется дословный. Вы получите то, что вы положили, не нужно вмешиваться.
... некоторые реализации не совместимы. Например, они будут кодировать
&
символы в значениях атрибутов, но забывают о символы новой строки или табуляции. Это ставит вас в проигрышную позицию, так как вы не можете просто заменить новые строки на
заранее.эти реализации сохранят символы новой строки некодированными, например:
<xml attribute="line 1 line 2" />
при разборе таких документ, буквальный перевод строк в атрибутах нормализуются в единое пространство (опять же, в соответствии со спецификацией) - и таким образом они потеряны.
сохранение (и сохранение!) новые строки в атрибутах невозможны в этих реализациях.
вы можете использовать объект
для представления новой строки в атрибуте XML.
может использоваться для представления возврата каретки. CRLF стиля windows может быть представлен как
.это законный синтаксис XML. Смотрите XML spec для более подробной информации.
грубый ответ может быть:
XmlDocument xDoc = new XmlDocument(); xDoc.Load(@"Agenda.xml"); //make stuff with the xml //make attributes value = "\r\n" (you need both expressions to make a new line) string a = xDoc.InnerXml.Replace("
", "\r").Replace("
", "\n").Replace("><",">\r \n<"); StreamWriter sDoc = new StreamWriter(@"Agenda.xml"); sDoc.Write(a); sDoc.Flush(); sDoc.Dispose();
Это будет, как вы видите, просто строка