0

我似乎无法指出并阅读正确的信息。我是使用 Linq 的新手,并且尝试过(在将文档加载为 XDocument 和 XElement 之后)选择、root.xelement、后代、元素、节点等,但没有找到正确的方法来指向我正在尝试的内容目标。我现在有一个看起来像这样的 XML 文档。

<Contacts>
   <EntryName>
     <Name>NAME1</Name>
     <Email>EMAIL</Email>
     <EIL>1</EIL>
     <Notes>Notes</Notes>
   </EntryName>
</Contacts>

我需要提取所有 EntryNames 的列表并将它们放在 listBox1 中。当用户选择一个时,它会收集“listBox1.SelectedItem”并收集关联的电子邮件地址并将其放在文本框中。运行时的“EntryName”由文本字段替换。我最近的尝试是这样的:

    var xml = XDocument.Load(apppath + @"\Contacts.clf");
    var entries = xml.Element("Contacts").Value.ToString();

        foreach (var entry in entries)
        {
            listBox1.Items.Add(entry.ToString());
        }

由于 foreach 函数,这让我在完整文件的时间只得到字符。我正在寻找的是来自联系人的列表框中:

EntryName
EntryName2
EntryName2...etc

当被选中时(从 EntryName2 中选择),它会拉出电子邮件字段并将其放在文本框中。请原谅明显或愚蠢的错误,对此非常陌生。谢谢。

4

2 回答 2

0

试试这个。我相信您正在尝试查询 XML 文档中的 Name 元素。

var xml = XDocument.Load(apppath + @"\Contacts.clf");
var entries = from entryName in xml.Descendants("EntryName") select (string)entryName.Element("Name");

foreach (var entry in entries)
{
   listBox1.Items.Add(entry);
}
于 2013-05-10T02:15:41.840 回答
0

我写了一个关于如何实现这一目标的快速示例

public partial class Form1 : Form
{
    XDocument doc;
    public Form1()
    {
        InitializeComponent();

        doc = XDocument.Load(apppath + @"\Contacts.clf");
        var entryNames = doc.Root.Elements("EntryName")
            .Select(elem => elem.Element("Name").Value ).ToArray();
        listBox1.Items.AddRange(entryNames);
    }

    private void listBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        textBox1.Text = doc.Root.Elements("EntryName")
            .FirstOrDefault(node => node.Element("Name").Value == listBox1.SelectedItem.ToString())
            .Element("Email").Value;

    }
}

但是,找到电子邮件似乎太麻烦了。我会这样处理它:

public partial class Form1 : Form
{
    XDocument doc;
    public Form1()
    {
        InitializeComponent();
        String apppath = ".";
        doc = XDocument.Load(apppath + @"\Contacts.clf");
        var contacts = doc.Root.Elements("EntryName")
            .Select( elem =>
                new Contact { 
                    Name =  elem.Element("Name").Value,
                    Email = elem.Element("Email").Value,
                    EIL = elem.Element("EIL").Value,
                    Notes = elem.Element("Notes").Value
            }
        ).ToList();
        listBox1.DataSource = contacts;
        listBox1.DisplayMember = "Name";
    }

    private void listBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        textBox1.Text = (listBox1.SelectedItem as Contact).Email;
    }        
}

public class Contact
{
    public String Name { get; set; }
    public String Email { get; set; }
    public String EIL { get; set; }
    public String Notes { get; set; }
}
于 2013-05-10T03:57:03.370 回答