Создание объекта XML Element из XML Writer в C # - PullRequest
5 голосов
/ 18 февраля 2009

Я пишу службу Windows на C #. У меня есть XmlWriter, который содержит выходные данные XSLT-преобразования. Мне нужно получить XML в объект XMLElement для передачи в веб-сервис.

Каков наилучший способ сделать это?

Ответы [ 3 ]

8 голосов
/ 18 февраля 2009

Вам не нужна промежуточная строка, вы можете создать XmlWriter, который записывает непосредственно в XmlNode:

XmlDocument doc = new XmlDocument();
using (XmlWriter xw = doc.CreateNavigator().AppendChild()) {
  // Write to `xw` here.
  // Nodes written to `xw` will not appear in the document 
  // until `xw` is closed/disposed.
}

и передайте xw в качестве результата преобразования.

NB. Некоторые части xsl: output будут игнорироваться (например, кодировка), поскольку XmlDocument будет использовать свои собственные настройки.

7 голосов
/ 18 февраля 2009

Ну, XmlWriter не содержит вывод; как правило, у вас есть резервный объект (может быть StringBuilder или MemoryStream), который является местом сброса. В этом случае StringBuilder, вероятно, является наиболее эффективным ... возможно, что-то вроде:

    StringBuilder sb = new StringBuilder();
    using (XmlWriter writer = XmlWriter.Create(sb))
    {
        // TODO write to writer via xslt
    }
    string xml = sb.ToString();
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    XmlElement el = doc.DocumentElement;
0 голосов
/ 06 августа 2014

Если вы предоставляете средство записи, вы предоставляете репозиторий, в который генератор данных передает данные, поэтому воспроизведение Ричарда хорошо, вам не нужен строитель строк для отправки данных из читателя в XmlDocument!

...