を使用してクライアントからサーバーにXMLを転送したいFTP
。私が得るのはXmlElement
オブジェクトです。File
を作成して適切な場所(FTP)にアップロードできることを知っています。
File
ただし、 (ローカルディスクへのファイルの保存を避けるために)メモリ内に作成する方が良いと思います。
誰かが私にこれを達成する方法を教えてもらえますか?
私はC#4.0を使用しています。
を使用してクライアントからサーバーにXMLを転送したいFTP
。私が得るのはXmlElement
オブジェクトです。File
を作成して適切な場所(FTP)にアップロードできることを知っています。
File
ただし、 (ローカルディスクへのファイルの保存を避けるために)メモリ内に作成する方が良いと思います。
誰かが私にこれを達成する方法を教えてもらえますか?
私はC#4.0を使用しています。
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();
@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();
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;
}