##XMLFİLE##
<Title month="1" year="2016">
<film day="1">
<morning>
Fight Club
</morning>
<night>
Inceptıon
</night>
</film>
<film day="2">
<morning>
xyzasda
</morning>
<night>
czxsadasas
</night>
</film>
</Title>
MY CLASS
public class FilmController : Controller
{
public ActionResult DisplayXML()
{
var data = new List<Films>();
data = ReturnData();
return View(data);
}
private List<Films> ReturnData(){
string xmldata = "myxmldata.xml";
DataSet ds = new DataSet();
ds.ReadXml(xmldata);
var filmlist= new List<Films>();
filmlist= (from rows in ds.Tables[0].AsEnumerable()
select new Films
{
month= Convert.ToInt32(rows[0].ToString()),
year= rows[1].ToString(),
film= rows[2].ToString(),
morning= rows[3].ToString(),
night= rows[4].ToString(),
}).ToList();
return filmlist;
}
}
模型
public int month{ get; set; }
public string year{ get; set; }
public string day { get; set; }
public string morning { get; set; }
public string night{ get; set; }
如何读取子节点?我想创建一个表。我将使用此数据创建一个表。我想把它保存在列表中。 我编辑了.. 错误:其他信息:找不到第3列。
错误在哪里?我想阅读xml文件。
答案 0 :(得分:1)
您可以使用Films
轻松检索Linq-To-XML
集合:
XDocument xdoc = XDocument.Load(xmldata);
List<Films> result = xdoc.Descendants("film")
.Select(x =>
{
var film = x;
var title = x.Parent;
return new Film
{
month = (int)title.Attribute("month"),
year = (string)title.Attribute("year"),
day = (string)film.Attribute("day"),
morning = (string)film.Element("morning"),
night = (string)film.Element("night")
};
}
).ToList();
这将返回两部电影,每部电影都有月份和电影。年份基于Title
节点。
代码说明:
首先,我们找到所有film
个节点,然后使用Select
进行投影。在select子句中,我们可以为每部电影保存变量(您可以在select方法中考虑film
,如foreach循环中的别名)。此外,我们将父Title
节点存储在title变量中。在此之后我们需要做的就是阅读元素&amp;属性。
如果难以理解Method语法,那么这里是等效的query syntax
:
List<Films> result2 = (from x in xdoc.Descendants("film")
let film = x
let title = x.Parent
select new Film
{
month = (int)title.Attribute("month"),
year = (string)title.Attribute("year"),
day = (string)film.Attribute("day"),
morning = (string)film.Element("morning"),
night = (string)film.Element("night")
}).ToList();
答案 1 :(得分:1)
您可以使用以下内容解析XML:
var xml = XDocument.Load(xmlFile);
var films = xml.Descendants("film").Select(d => new Films()
{
month = Convert.ToInt32(d.Parent.Attribute("month").Value),
year = d.Parent.Attribute("year").Value,
day = d.Attribute("day").Value,
morning = d.Element("morning").Value,
night = d.Element("night").Value
});
在行动HERE中查看。
答案 2 :(得分:0)
当我在数据集中读取您的xml时,我得到2个表 表1“标题”,一行三列 表2“具有两行和四列的”薄膜
你读过Tables [0](3栏) - 你试着读第3列的第3列。
您需要更改循环 - 因为您需要从两个表中加载数据。