Как сохранить новые строки в атрибуте 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();Это будет, как вы видите, просто строка