我正在使用表单来显示XML元素.每次我点击列表框中的模块时,我想<Code>在表单上的标签中显示其值.我遇到的问题是,我所做的就是XML被一次性读取,而我无法或不知道如何在我的XML文件中搜索.所以我想我只需要一种搜索XML来查找<Code>元素的方法.
编辑:<Code>当我匹配<Name>列表框中的元素时,我试图在标签中显示元素的程度如下:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var document = XDocument.Load(workingDir + @"\ModulesList.xml");
var code = from d in document.Descendants("Name")
where d.Value == listBox1.SelectedItem.ToString()
select d.Parent.Element("Code").Value;
labelCodeNumber.Text = code.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但问题是labelCodeNumber没有显示值code,而是显示了一些奇怪的集合.另外我不确定我是否正在输出正确的ielabelCodeNumber.Text = code.ToString();
这是XML:
<?xml version="1.0" encoding="utf-8" ?>
<SoftwareEngineering>
<Module>
<Name>Algorithms and Data Structures</Name>
<Code>3SFE504</Code>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>3D Graphics I</Name>
<Code>3SFE508</Code>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Event-Driven Programming</Name>
<Code>3SFE513</Code>
<Capacity>10</Capacity>
<Semester>1</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Object Oriented Design</Name>
<Code>3SFE514</Code>
<Capcity>10</Capcity>
<Semester>1</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Requirements Engineering</Name>
<Code>3SFE516</Code>
<Capacity>10</Capacity>
<Semester>1</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Introduction to AI</Name>
<Code>3SFE599</Code>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Java Mobile Application Development</Name>
<Code>3SFE540</Code>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisite>3SFE514(corequisite)</Prerequisite>
</Module>
<Module>
<Name>C# .NET Programming</Name>
<Code>3SFE541</Code>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisite>3SFE514(corequisite)</Prerequisite>
</Module>
<Module>
<Name>Software Engineering Group Project</Name>
<Code>3SFE515</Code>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisite>3SFE514(corequisite)</Prerequisite>
</Module>
<Module>
<Name>Software Engineering</Name>
<Code>3SFE519</Code>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Mobile User Interface Development</Name>
<Code>3SFE542</Code>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisite>3SFE540</Prerequisite>
</Module>
<Module>
<Name>Interactive Multimedia</Name>
<Code>3MTS954</Code>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Concurrent Programming</Name>
<Code>3SFE555</Code>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Mobile Gaming</Name>
<Code>3SFE557</Code>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisite>none</Prerequisite>
</Module>
<Module>
<Name>Intelligent Systems</Name>
<Code>3SFE500</Code>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisite>3SFE599</Prerequisite>
</Module>
<Module>
<Name>3D Graphics II</Name>
<Code>3SFE501</Code>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisite>3SFE508</Prerequisite>
</Module>
</SoftwareEngineering>
Run Code Online (Sandbox Code Playgroud)
最终编辑:我想通了!感谢Marcin和psubsee的帮助和贡献.下面的代码在listbox1_selectedindexchanged方法中
var code = from d in document.Descendants("Name")
where d.Value == (String) listBox1.SelectedItem
select d.Parent.Element("Code").Value;
foreach (var item in code)
{
labelCodeNumber.Text = item.ToString();
}
Run Code Online (Sandbox Code Playgroud)
如果您正在一次阅读它,请不要使用XmlReader.
将它加载到XDocument中,您可以使用LINQ找到您想要的任何内容.
XDocument doc = XDocument.Load(fileName); // do this 1x
// untested
var names = doc.Root.Descendants("Module").Elements("Name").Select(e => e.Value);
listBox1.Items.AddRange(names);
Run Code Online (Sandbox Code Playgroud)
您应该更改您的概念并使用XDocument而不是XmlReader:
var document = XDocument.Load(workingDir + @"\ModulesList.xml");
Run Code Online (Sandbox Code Playgroud)
要填写列表框,请使用以下内容:
var items = From d in document.Descendants("Name")
select d.Value;
foreach(var item in items)
listBox1.Items.Add(item);
Run Code Online (Sandbox Code Playgroud)
然后<code>从所选元素中找到您可以进行的那种Linq to XML查询:
var code = From d in document.Descendants("Name")
where d.Value == SelectedName
select d.Parent.Element("Code").Value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |