C# 在C中从XML编写器创建XML元素对象#

C# 在C中从XML编写器创建XML元素对象#,c#,xml,xmlwriter,C#,Xml,Xmlwriter,我正在用C#编写一个Windows服务。我有一个XmlWriter,它包含XSLT转换的输出。我需要将XML放入XMLElement对象中,以传递给web服务 最好的方法是什么?嗯,XmlWriter不包含输出;通常,您有一个作为转储位置的备份对象(可能是StringBuilder或MemoryStream)。在这种情况下,StringBuilder可能是最有效的。。。也许是这样的: StringBuilder sb = new StringBuilder(); using (X

我正在用C#编写一个Windows服务。我有一个
XmlWriter
,它包含XSLT转换的输出。我需要将XML放入
XMLElement
对象中,以传递给web服务


最好的方法是什么?

嗯,
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;

您不需要中间字符串,可以创建直接写入XmlNode的XmlWriter:

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作为转换的输出传递


注意。xsl:output的某些部分将被忽略(例如编码),因为XmlDocument将使用自己的设置。

如果您提供了一个writer,您就提供了一个存储库,其中输出生成器正在传输数据,因此Richard的回放效果很好,您不需要字符串生成器将数据从读取器发送到XmlDocument

我总是对你的答案如此全面和完整的方式感到惊讶,以至于几乎没有任何其他人可以补充。:-)这仍然通过一个中间字符串。