1

我有一个奇怪的问题。当遍历数组并使用 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;
    }
4

2 回答 2

2

你需要Flush()作家。

于 2012-07-12T16:24:04.057 回答
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;
}
于 2012-07-12T16:46:36.543 回答