1

我想将 XML 从客户端传输到使用FTP. 我得到的是XmlElement对象。我知道我可以创建File并将其上传到适当的位置 (FTP)。

但是,我认为最好File在内存中创建(以避免将文件保存在本地磁盘上)。

有人可以指导我如何实现这一目标吗?

我正在使用 C# 4.0。

4

3 回答 3

5

您可以使用FtpWebRequest.GetRequestStream()直接写入请求流,而无需先将文件保存在磁盘上

检索用于将数据上传到 FTP 服务器的流。

XmlElement.OuterXml返回 XmlElement 的字符串表示形式。

string xml = myXmlElement.OuterXml;
byte[] bytes = Encoding.UTF8.GetBytes(xml);
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
于 2012-07-17T05:47:37.843 回答
2

Ling2Xml 更易于使用:

stream = ftpRequest.GetRequestStream();

XElement xDoc = new XElement("Root",
                    new XElement("Item1", "some text"),
                    new XElement("Item2", new XAttribute("id", 666))
                    );

xDoc.Save(stream);

或者你可以使用serialization

XmlSerializer ser = new XmlSerializer(typeof(SomeItem));
ser.Serialize(stream, new SomeItem());

public class SomeItem
{
    public string Name;
    public int ID;
}
于 2012-07-17T05:55:16.293 回答
2

@LB 给出了使用提示XDocument,它解决了我的问题。

这是解决方案:

  • 编写代码以XDocument从对象中创建XmlElement对象。

    StringBuilder stringBuilder = new StringBuilder();
    XmlWriter xmlWriter = new XmlTextWriter(new StringWriter(stringBuilder));
    xmlElement.WriteTo(xmlWriter);
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load(new StringReader(stringBuilder.ToString()));
    XDocument doc = XDocument.Load(xmlDocument.CreateNavigator().ReadSubtree(), LoadOptions.PreserveWhitespace);
    
  • 然后像这样使用FTP的流。

    Stream ftpstream = ((FtpWebRequest)WebRequest.Create(path)).GetRequestStream();    
     doc.Save(ftpstream);
    
    ftpstream.Close();
    
于 2012-07-17T06:17:05.237 回答