我有一个奇怪的问题。在循环遍历数组并使用XMLWriter和StringBuilder创建XML时,字符串就会停止添加到字符串生成器中。在我收到此错误时调用XmlDoc.LoadXml方法之前,我没有收到任何错误:
发生了意外的文件结束。以下元素未关闭:ID,端口,端口。第1256行,第39位。
当我逐步执行代码时,循环继续并且不会抛出任何错误,但是没有任何内容添加到字符串构建器中。
任何想法?感谢
public XmlElement LclExportGetPorts()
{
DAL.DALSoapClient soapy = new DAL.DALSoapClient();
DAL.DALStringString[] ports = soapy.EnumPortsWeb(false);
XmlDocument XmlDoc = new XmlDocument();
StringBuilder SB = new StringBuilder();
XmlWriterSettings XmlSettings = new XmlWriterSettings();
XmlSettings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(SB, XmlSettings))
{
writer.WriteStartDocument();
writer.WriteStartElement("Ports");
foreach (var p in ports)
{
writer.WriteStartElement("Port");
writer.WriteElementString("ID", p.Key);
writer.WriteElementString("Name", p.Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
string temp = writer.ToString();
XmlDoc.LoadXml(SB.ToString());
}
XmlElement Result = XmlDoc.DocumentElement;
return Result;
}
答案 0 :(得分:2)
你需要Flush()
作家。
答案 1 :(得分:2)
我认为使用Linq2Xml要容易得多。 (也不需要先形成一个xml字符串,然后将其解析为Wug
建议)
public XElement LclExportGetPorts()
{
......
XElement xDoc = new XElement("Ports");
foreach (var p in ports)
{
xDoc.Add(new XElement("Port", new XElement("ID", p.ID),
new XElement("Name", p.Name)));
}
return xDoc;
}