如何在列表框中显示XML并将其传递给c#中的文本框

本文关键字:文本 列表 显示 XML | 更新日期: 2023-09-27 18:17:50

我正在努力制作一个基本的c#应用程序,从XML文件中获取许多项目,在列表框中显示"title"节点,并且,当选择标题时,在文本框中显示该项目的其他节点。文本框允许用户编辑XML内容并保存更改。

我的问题是相当基本的我认为:列表框工作得很好,但文本框不更新时,一个新的标题在列表框中被选中。我想它不应该太复杂,但对我来说它是——我真的被困在这里了。

我知道像这样的问题经常出现,但对我来说,大多数问题似乎都不精确或过于复杂:我(显然)是c#新手,并且真的希望保持代码尽可能简单和透明。

我的XML示例:

<?xml version='1.0'?>
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

cs文件

private void btnLireXML_Click(object sender, EventArgs e)
{
    XmlDocument xDox = new XmlDocument();
    xDoc.Load(books.xml);
    XmlNodeList lst = xDoc.GetElementsByTagName("title");
    foreach (XmlNode n in lst)
    {
        listBox1.Items.Add(n.InnerText); 
    }   
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    textBox1.Text = listBox1.SelectedItem.ToString();
}

这里,在文本框部分,我几乎尝试了所有方法…

WFA文件包含一个加载XML文件的按钮、一个列表框和一个文本框(也许每个XML节点都有一个文本框会更好)

如何在列表框中显示XML并将其传递给c#中的文本框

当xml加载时,将这些书放在列表中。

建议使用linq2xml (XElement),因为它比传统的XmlDocument更方便。

private void ButtonLoad_Click(object sender, EventArgs e)
{
    var xml = XElement.Load("books.xml");
    bookList = xml.Elements("book").ToList();
    foreach (var book in bookList)
    {
        string title = book.Element("title").Value;
        listBox.Items.Add(title);
    }
}

其中List<XElement> bookList为表单字段。

在事件处理程序中根据索引从列表中检索图书。

private void ListBox_SelectedIndexChanged(object sender, EventArgs e)
{
    var book = bookList[listBox.SelectedIndex];
    textBox.Text =
        "Genre: " + book.Attribute("genre").Value + Environment.NewLine +
        "Price: " + book.Element("price").Value;
    // Put other values to textbox (set Multiline = true)
}

当然,您可以使用多个文本框(或标签)。

textBoxGenre.Text = "Genre: " + book.Attribute("genre").Value;
textBoxPrice.Text = "Price: " + book.Element("price").Value;

等等