4

一部の値を xml ファイルに保存しようとしています。すでに Xml ファイルを作成しており、データを上書きしようとしています。コードが与えられます..

/*storepassword.cs *//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

public class StorePassword
{
    public StorePassword()
    {
    }
    public void  store(NewPassword nps)
    {
       XmlDocument XmlDoc = new XmlDocument();

       //XmlDoc.Load(@"Password.xml");
       XmlDoc.LoadXml("Password.xml");

       XmlNode root = XmlDoc.DocumentElement;
       XmlNode myNode1 = root.SelectSingleNode("UserName");
       XmlNode myNode2 = root.SelectSingleNode("PassWord");
       myNode1.Value = "sjn";
       myNode2.Value = "sjn123";
       XmlDoc.Save(@"Password.xml");
   }
}

//NewPassword.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class NewPassword
{

    public NewPassword()
    {

    }
    public string username{ get; set; }
    public string Password{ get; set; }
}

ボタンをクリックすると..

NewPassword nps = new NewPassword();
nps.username = TxtUser.Text;
nps.Password = TxtNewPassword.Text;
StorePassword sp=new StorePassword();
sp.store(nps);

既存の Xml ファイルには次のものが含まれています。

<?xml version="1.0" encoding="utf-8"?>
<ROOT>
  <UserName>abc</UserName>
  <PassWord>123</PassWord>
</ROOT>

しかし、それは機能していません..

ルート レベルのデータは無効です。行 1、位置 1

このエラーが発生します..

コードを次のように変更しましたXmlDoc.Load(@"Password.xml");

エラーが次のように変更されました

Root element is missing.

   Description: An unhandled exception occurred during the execution of the current web                  request. Please review the stack trace for more information about the error and where it   originated in the code. 

Exception Details: System.Xml.XmlException: Root element is missing.

なぜこれが起こるのですか?

4

3 に答える 3

1

XML シリアル化を使用してみてください。

public static partial class ObjectXMLSerializer<T> where T : class
{
            private static void SaveToDocumentFormat(T serializableObject, System.Type[] extraTypes, string path, IsolatedStorageFile isolatedStorageFolder)
            {
                using (TextWriter textWriter = CreateTextWriter(isolatedStorageFolder, path))
                {
                    XmlSerializer xmlSerializer = CreateXmlSerializer(extraTypes);

                    //Cuong: set name space to null
                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                    ns.Add("", "");
                    xmlSerializer.Serialize(textWriter, serializableObject, ns);
                }
            }
            public static void Save(T serializableObject, string path)
            {
                    SaveToDocumentFormat(serializableObject, null, path, null);
            }

}
于 2012-11-02T09:34:32.163 に答える
0

消去

<?xml version="1.0" encoding="utf-8"?>

から

<?xml version="1.0" encoding="utf-8"?>
<ROOT>
  <UserName>abc</UserName>
  <PassWord>123</PassWord>
</ROOT>

なぜ機能するのかはわかりませんが、コードでは常にそうしています。はい、 XmlDocument.LoadXmlではなくXmlDocument.Loadを使用する必要があります

于 2012-11-02T09:59:38.677 に答える
0

Xml をロードするときは、 Server.MapPath を使用する必要があります。XmlDoc.LoadXml(Server.MapPath("Password.xml"));

于 2012-11-02T09:31:33.690 に答える