0

FileStreame WriterクラスのxmlファイルからXMLファイルを作成しようとしていますが、エラーが発生します。Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it.

それは<?xml version='1.0' encoding='utf-8' standalone='yes'?>私のコードの2倍のルート要素タグを作成します

using (FileStream fileStream = new FileStream(_logFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    string currentDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
                    xmlDoc.Load(fileStream);
                    XmlElement newelement = xmlDoc.CreateElement("LogData");
                    XmlElement xmlLogID = xmlDoc.CreateElement("LogID");
                    XmlElement xmlLogDateTime = xmlDoc.CreateElement("LogDateTime");
                    XmlElement xmlLogType = xmlDoc.CreateElement("LogType");
                    XmlElement xmlLogFlag = xmlDoc.CreateElement("LogFlag");
                    XmlElement xmlLogApplication = xmlDoc.CreateElement("LogApplication");
                    XmlElement xmlLogModule = xmlDoc.CreateElement("LogModule");
                    XmlElement xmlLogLocation = xmlDoc.CreateElement("LogLocation");
                    XmlElement xmlLogText = xmlDoc.CreateElement("LogText");
                    XmlElement xmlLogStackTrace = xmlDoc.CreateElement("LogStackTrace");

                    xmlLogID.InnerText = _logIDPrefix + currentDateTime + randomNumber;
                    xmlLogDateTime.InnerText = currentDateTime;
                    xmlLogType.InnerText = ((LogTypes)Convert.ToInt32(logType)).ToString();
                    xmlLogFlag.InnerText = logFlag;
                    xmlLogApplication.InnerText = _logApplication;
                    xmlLogModule.InnerText = logModule;
                    xmlLogLocation.InnerText = logLocation;
                    xmlLogText.InnerText = logText;
                    xmlLogStackTrace.InnerText = logStackTrace;

                    newelement.AppendChild(xmlLogID);
                    newelement.AppendChild(xmlLogDateTime);
                    newelement.AppendChild(xmlLogType);
                    newelement.AppendChild(xmlLogFlag);
                    newelement.AppendChild(xmlLogApplication);
                    newelement.AppendChild(xmlLogModule);
                    newelement.AppendChild(xmlLogLocation);
                    newelement.AppendChild(xmlLogText);

                    xmlDoc.DocumentElement.AppendChild(newelement);
                    xmlDoc.Save(fileStream);

thiseコードは複数回実行されますが<?xml version='1.0' encoding='utf-8' standalone='yes'?>、ルート要素をtwiseで作成しないようにしたいだけです

4

1 に答える 1

0

(既存のファイルの最後Loadにストリームを残す)を呼び出してから、を呼び出します。同じストリームでそれを行わないでください。再配置することもできますが、新しいドキュメントが短いと問題が発生します。(現時点ではありませんが、将来的には可能性があります。)Save

これを3つのセクションに分割することを強くお勧めします。

  • 読み取るだけのストリームを作成し、既存のドキュメントをロードします
  • メモリ内のドキュメントを変更する
  • 書き込む(既存のファイルを切り捨てる)だけのストリームを作成し、ドキュメントを保存します
于 2013-01-15T13:37:54.340 に答える