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での作業ははるかに簡単だと思います。Wug(また、最初にxml文字列を作成してから、提案どおりに解析する必要はありません)

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 に答える