我似乎无法指出并阅读正确的信息。我是新手使用Linq并尝试过(在将文档加载为XDocument和XElement之后)select,root.xelement,descendant,element,node等,并且没有找到指向我正在尝试的方法的正确方法目标。 我现在有一个XML文档。
<Contacts>
<EntryName>
<Name>NAME1</Name>
<Email>EMAIL</Email>
<EIL>1</EIL>
<Notes>Notes</Notes>
</EntryName>
</Contacts>
我需要提取所有EntryNames的列表并将它们放在listBox1中。 当用户选择一个时,它会收集“listBox1.SelectedItem”和 收集关联的电子邮件地址并将其放在textBox中。 运行时期间的“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功能。我正在寻找的是来自Contacts:
的listBoxEntryName
EntryName2
EntryName2...etc
并且当选择时(来自EntryName2),它会拉出电子邮件字段并将其放在文本框中。请原谅,明显或愚蠢的错误,这是非常新的。感谢。
答案 0 :(得分: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);
}
答案 1 :(得分: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; }
}