我有以下使用XmlDocument
:
<?xml version="1.0" standalone="yes"?>
<NewConfig xmlns="http://tempuri.org/NewConfig.xsd">
<SystemReference xmlns="">
<ID>1</ID>
<Name>CountryName</Name>
</SystemReference>
<ClientList xmlns="">
<Type>Private</Type>
<!-- elements omitted... -->
<VAT>1234567890</VAT>
</ClientList>
</NewConfig>
我正在使用以下代码将此XML保存到TCP套接字:
TcpClient client = ...
XmlDocument configDocument = ...
using (StreamWriter writer = new StreamWriter(client.GetStream()))
{
writer.AutoFlush = true;
configDocument.Save(writer);
writer.WriteLine();
}
但是这会导致套接字另一端收到的XML被截断 - 最后2个元素(</ClientList>
和</NewConfig>
)永远不存在。
但是,如果我使用以下代码,则会成功发送XML:
TcpClient client = ...
XmlDocument configDocument = ...
using (StreamWriter writer = new StreamWriter(client.GetStream()))
{
writer.AutoFlush = true;
writer.WriteLine(configDocument.OuterXml);
}
因此,我的问题是:有人知道为什么XmlDocument.Save()
在写入Stream
时似乎忽略了结束元素?
答案 0 :(得分:1)
两种发送数据的方式都没有错。你在服务器端读取XML的方式有什么问题。例如,使用第一个方法和以下监听器,我能够获得整个XML:
class Program
{
static void Main(string[] args)
{
var listener = new TcpListener(IPAddress.Loopback, 9999);
listener.Start();
while (true)
{
var client = listener.AcceptTcpClient();
using (var stream = client.GetStream())
using (var reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
}