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

@L.B. gave the hint to use XDocument and it solved my problem.

Here is the solution:

  • Write a code to create XDocument object out of the XmlElement object.

    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);
    
  • Then use the FTP's stream like this.

    Stream ftpstream = ((FtpWebRequest)WebRequest.Create(path)).GetRequestStream();    
     doc.Save(ftpstream);
    
    ftpstream.Close();
    
于 2012-07-17T06:17:05.237 に答える
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 に答える