2

そこで、以下に、comboBox1の2つのアイテムをロード時に名前(SelenaとMaria)でリストするコードを作成しました。そのうちのいずれかを選択すると、たとえばMariaと言って、button1をクリックすると、3つのテキストボックスにMariaの名前が入力されます。 、usnおよびpawd属性値で、次のようになります。表示名:Mariaユーザー名:mary26パスワード:d4e5r

コードのその部分は私の目的に役立つので、私は満足しています。

しかし、私は理解しようとしているコードの一部に苦労しています。button2を作成しました。表示名、ユーザー名、またはパスワードのテキストボックスの値を変更し、[保存]をクリックすると、xmlファイルの正しい場所にMariaに保存され、Selenaまたは他の何か。

私は今1週間ブラウジングを試みましたが、複数の解決策が見つかりませんでした。

att.xml:

<database>
<item name="Selena" usn="sele22" pawd="fed47a"></item>
<item name="Maria" usn="mary26" pawd="d4e5r"></item>
<database>

私のプロジェクト:

private void Form3_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            XmlTextReader reader = new XmlTextReader("att.xml");
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name == "item")
                    {
                        comboBox1.Items.Add(reader.GetAttribute("name"));
                    }
                }
            }

            reader.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string secit = comboBox1.SelectedItem as string;
            XmlTextReader lola = new XmlTextReader("att.xml");
            while (lola.Read())
            {
                if (lola.NodeType == XmlNodeType.Element)
                {
                    string poop = lola.GetAttribute("name"); 
                    if (poop == secit) 
                    {
                        string username = lola.GetAttribute("usn"); 
                        string password = lola.GetAttribute("pawd");
                        string dispname = lola.GetAttribute("name");

                        textBox1.Text = dispname;
                        textBox2.Text = username;
                        textBox3.Text = password;

                    }
                }
            }

            lola.Close();
        }
4

2 に答える 2

2

XmlDocumentは次のように使用できます。

XmlDocument doc = new XmlDocument();
doc.Load("att.xml");
foreach(XmlNode item in doc.SelectNodes("//item"))
    comboBox1.Items.Add(item.Attributes["name"].Value);


void button3_Click(object sender, NotifyArgs e)
{
    XmlNode item = doc.SelectSingleNode("//item[@name='" + comboBox1.Text + "']");
    if (item == null) return;
    item.Attributes["name"].Value = textBox1.Text;
    ...
    doc.Save("att.xml");
}
于 2012-09-04T21:03:00.830 に答える
1

もう1つの方法は、LINQを学習したい場合は、XDocumentを使用することです。

XMLファイルを更新する別のメソッドがあると仮定しましょう。おそらく次のようになります。

private static void Update(string key, string pwd, string usn)
{
    // Enter code here to update the item
}

XPathを使用して、次の名前の要素を見つけることができます。

var document = XDocument.Load("XMLFile1.xml");
var element = document.XPathSelectElement(string.Format("/database/item[@name = \"{0}\"]", key));
if (element != null)
{
    element.SetAttributeValue("usn", usn);
    element.SetAttributeValue("pawd", pwd);
    document.Save("XMLFile2.xml");
}

または、XDocument / XElement/LINQメソッドを使用してドキュメントを検索します。

var document = XDocument.Load("XMLFile1.xml");
var element = document.Elements("database")
    .Elements("item")
    .Attributes("name")
    .Where(a => a.Value == key)
    .Select(a => a.Parent)
    .SingleOrDefault();
if (element != null)
{
    element.SetAttributeValue("usn", usn);
    element.SetAttributeValue("pawd", pwd);
    document.Save("XMLFile3.xml");
}

または、LINQ式として書き直すこともできます。

var document = XDocument.Load("XMLFile1.xml");
var elements = from e1 in document.Elements()
                where e1.Name == "database"
                from e2 in e1.Elements()
                where e2.Name == "item"
                from attribute in e2.Attributes()
                where attribute.Name == "name" && attribute.Value == key
                select e2;
var element = elements.SingleOrDefault();
if (element != null)
{
    element.SetAttributeValue("usn", usn);
    element.SetAttributeValue("pawd", pwd);
    document.Save("XMLFile3.xml");
}

それに応じて自由に適応してください。

于 2012-09-04T22:04:51.117 に答える