C# 如何读取Xml文件并将listView中的元素列表放在表单上
我有一个xml文件“modules.xml”,我试图从中加载表单中listView中每个模块的名称。我试过下面的代码,它没有给我错误,也没有工作 modules.xmlC# 如何读取Xml文件并将listView中的元素列表放在表单上,c#,C#,我有一个xml文件“modules.xml”,我试图从中加载表单中listView中每个模块的名称。我试过下面的代码,它没有给我错误,也没有工作 modules.xml <?xml version="1.0" encoding="utf-8" ?> <Modules> <Module> <Code>3SFE504</Code> <Name>Algorithms and Data Structures<
<?xml version="1.0" encoding="utf-8" ?>
<Modules>
<Module>
<Code>3SFE504</Code>
<Name>Algorithms and Data Structures</Name>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Monday 9-11</LectureSlot>
<TutorialSlot>Monday 11-1pm</TutorialSlot>
</Module> -
<Module>
<Code>3SFE508</Code>
<Name>3D Graphics 1</Name>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Monday 2-4pm</LectureSlot>
<TutorialSlot>Monday 4-6pm</TutorialSlot>
</Module> -
<Module>
<Code>3SFE513</Code>
<Name>Event-Driven Programming</Name>
<Capacity>10</Capacity>
<Semester>1</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Tuesday 9-11</LectureSlot>
<TutorialSlot>Tuesday 11-1pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE514</Code>
<Name>Object-Oriented Design</Name>
<Capacity>10</Capacity>
<Semester>1</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Tuesday 2-4pm</LectureSlot>
<TutorialSlot>Tuesday 4-6pm</TutorialSlot>
</Module> -
<Module>
<Code>3SFE516</Code>
<Name>Requirements Engineering</Name>
<Capacity>10</Capacity>
<Semester>1</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Thursday 9-11</LectureSlot>
<TutorialSlot>Thursday 11-1pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE599</Code>
<Name>Introduction to AI</Name>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Thursday 2-4pm</LectureSlot>
<TutorialSlot>Monday 9-11</TutorialSlot>
</Module> -
<Module>
<Code>3SFE540</Code>
<Name>Java Mobile Application Development</Name>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisites>3SFE514</Prerequisites>
<LectureSlot>Monday 11-1pm</LectureSlot>
<TutorialSlot>Monday 2-4pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE541</Code>
<Name>C# .Net Framework Programming</Name>
<Capacity>5</Capacity>
<Semester>1</Semester>
<Prerequisites>3SFE514</Prerequisites>
<LectureSlot>Monday 4-6pm</LectureSlot>
<TutorialSlot>Tuesday 9-11</TutorialSlot>
</Module>
<Module>
<Code>3SFE515</Code>
<Name>Software Engineering Group Project</Name>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisites>3SFE514</Prerequisites>
<LectureSlot>Monday 9-11</LectureSlot>
<TutorialSlot>Monday 11-1pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE519</Code>
<Name>Software Engineering</Name>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Monday 2-4pm</LectureSlot>
<TutorialSlot>Monday 4-6pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE542</Code>
<Name>Mobile User Interface Development</Name>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisites>3SFE540</Prerequisites>
<LectureSlot>Tuesday 9-11</LectureSlot>
<TutorialSlot>Tuesday 11-1pm</TutorialSlot>
</Module>
<Module>
<Code>3MTS594</Code>
<Name>Interactive Multimedia</Name>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Tuesday 2-4pm</LectureSlot>
<TutorialSlot>Tuesday 4-6pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE555</Code>
<Name>Concurrent Programming</Name>
<Capacity>5</Capacity>
<Semester>2</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Thursday 9-11</LectureSlot>
<TutorialSlot>Thursday 11-1pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE557</Code>
<Name>Mobile Gaming</Name>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisites>none</Prerequisites>
<LectureSlot>Thursday 9-11</LectureSlot>
<TutorialSlot>Monday 9-11</TutorialSlot>
</Module>
<Module>
<Code>3SFE500</Code>
<Name>Intelligent Systems</Name>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisites>3SFE599</Prerequisites>
<LectureSlot>Monday 11-1pm</LectureSlot>
<TutorialSlot>Monday 2-4pm</TutorialSlot>
</Module>
<Module>
<Code>3SFE501</Code>
<Name>3D Graphics II</Name>
<Capacity>10</Capacity>
<Semester>2</Semester>
<Prerequisites>3SFE508</Prerequisites>
<LectureSlot>Monday 4-6pm</LectureSlot>
<TutorialSlot>Tuesday 9-11</TutorialSlot>
</Module>
</Modules>
.cs文件是
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
namespace cw
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
String workingDir = Directory.GetCurrentDirectory();
XmlTextReader textReader = new XmlTextReader(workingDir + @"\modules.xml");
XmlNodeType type;
Console.WriteLine("BaseURI:" + textReader.BaseURI);
while (textReader.Read())
{
type = textReader.NodeType;
if (type == XmlNodeType.Element)
{
if (textReader.Name == "Name")
{
textReader.Read();
listView1.Items.Add(textReader.Value);
}
}
}
Console.ReadLine();
textReader.Close();
}
}
}
我执行了一个文本并得出结论,我的while循环正在工作,但是if语句没有工作。使用Linq2Xml
XDocument xDoc = XDocument.Load(new StringReader(xmlstr));
List<string> modules = xDoc
.Descendants("Module")
.Select(n => n.Element("Name").Value)
.ToList();
foreach(var item in modules)
listView1.Items.Add(item);
XDocument xDoc=XDocument.Load(新的StringReader(xmlstr));
列表模块=xDoc
.后代(“模块”)
.Select(n=>n.Element(“Name”).Value)
.ToList();
foreach(模块中的变量项)
listView1.Items.Add(项目);
根据您的xml结构。您可以直接使用let数据集进行读取
您的xml文件使用(filepath)方法。你可以
还要指定xml模式
它在我身边起作用。试试这个:
DataSet ds = new DataSet();
ds.ReadXml("c:\\xmlFile.xml");
if (ds.Tables.Count > 0)
{
dataGridView1.DataSource = ds.Tables[0];
foreach (DataRow item in ds.Tables[0].Rows)
{
listView1.Items.Add(item["Name"].ToString());
}
}
如果你考虑更复杂的XML,那么我建议你按“.L.B建议”进行。
< P>试试这个 DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("XMLFile1.xml"));
lsview.DataSource = ds.Tables[0];
lsview.DataBind();
aspx中的代码
<asp:ListView ID="lsview" runat="server" >
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</asp:ListView>
@ZainAfzal,在物品前面添加一个var
。不要只是复制和粘贴,试着理解代码。我做了,但现在它不接受“xmlstr”。我不必指定xml文件的位置或名称而不是“xmlstr”@ZainAfzal我通过从字符串加载xml来测试您的案例。如果要从文件加载,可以使用XDocument.Load(File.Open(…)
。我看不出你有任何努力。只需查看XDocument
@ZainAfzal的帮助,当然您需要指定位置!xmlstr只是一个需要根据需要设置的变量。@L.B,我可以问一下,为什么需要使用File.Open(..)或StreamReader(),当它像一个符咒一样使用简单的路径时?@L.B的回答表明这是一种干净的方法。但是,您的代码有什么问题。你说它不起作用是什么意思。这对我来说很好!我已经从代码中删除了while和if语句,并用LB提供的代码替换了整个方法。错误出现在“xmlstr”上,它表示“该名称在当前上下文中不存在”,您的老师应该告诉您停止使用new XmlTextReader()
。自.NET 2.0以来,它一直被弃用。改用XmlReader.Create()
。与XmlTextWriter
相同。他还应该告诉您使用块将XmlReader
放入中。DataSet
是一个糟糕的通用解决方案,因为它只适用于可以映射到关系结构的XML。是的。我同意您的看法,但是xml结构太简单,可以使用dataset导入。如果它没有很难从XML和关系结构过滤标签,那么我会考虑LIQ2XML…哦,我知道在这种情况下它会起作用。我只是说,DataSet
并不总是有效的。例如,如果同一个元素有“两个父”元素,那么它要么失败,要么在需要一个表时生成两个表。