Создание XML-документа с использованием Linq to XML в C # - PullRequest
2 голосов
/ 06 января 2012

Я использую приведенный ниже код для создания XML в C #:

     XDocument xDoc = new XDocument(new XDeclaration("1.0", "UTF-16","yes"),
          new XElement("Parent",
          from childItem in childItemList
          select new XElement("Child",
                    new XElement("source",childItem.Source),
                    new XElement("target", childItem.Target)
                    )));

Работает нормально, и документ создается, как и ожидалось.Но я хочу написать

    childItem.Source 
    childItem.Target

в качестве значений атрибутов, и я использовал для этого следующий код:

    XDocument xDoc = new XDocument(new XDeclaration("1.0", "UTF-16","yes"),
          new XElement("Parent",
          from childItem in childItemList
          select new XElement("Child",
                  (new XAttribute("value", childItem.Source))),
              new XElement("target", 
                 (new XAttribute("value",childItem.Target)))
               )));

Этот код также работает нормально, но проблема в том, что у меня многострочный текств

    childItem.Source
    childItem.Target

И когда то же самое записывается как Inner-Text узла, это работает нормально, но когда это записывается как значение атрибута, многострочный текст преобразуется в однострочный текст.Я хочу сохранить все пробелы и разрывы строк в документе XML как есть.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 25 мая 2013

Вы не можете иметь разрывы строк (CRLF) в атрибуте!Разрывы строк всегда преобразуются из класса XElement в шестнадцатеричный литерал, чтобы быть «безопасными».Я предполагаю, что это так, чтобы соответствовать HTTP (или некоторому другому сетевому протоколу) - например, новые строки не допускаются в URI.Вы всегда можете получить свой CRLF обратно из имеющегося у вас шестнадцатеричного значения.

...