我正在尝试解析这段XML
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<DagUren>
<Chauffeur>Vincent</Chauffeur>
<AanmeldTijd>4 dec. 2012 09:05:42</AanmeldTijd>
<Gewerkt>04:42</Gewerkt>
</DagUren>
我创建了一个包含Chauffer,AanmeldTijd,Gewerkt等字符串的DagUren类。
DagUren eenDagUren
= (from du in doc.Element("DagUren")
select new DagUren
{
Chauffeur = du.Element("Chauffeur").Value,
Gewerkt = du.Element("Gewerkt").Value,
Pauze = du.Element("Pauze").Value,
AanmeldTijd = du.Element("AanmeldTijd").Value,
}
);
编译器响应:无法找到源类型“System.Xml.Linq.XElement”的查询模式的实现。 “选择”未找到。
请建议,我花了很多时间重写它,每个指南都使用不同的方法......
答案 0 :(得分:2)
你的问题是,Element()
没有返回XElement
的集合,它只返回一个对象。 Linq只查询项目集合,而不是单个对象。所以你的解决方案是:
XElement du = doc.Element("DagUren");
DagUren ennDagUren =
new DagUren
{
Chauffeur = du.Element("Chauffeur").Value,
Gewerkt = du.Element("Gewerkt").Value,
Pauze = du.Element("Pauze").Value,
AanmeldTijd = du.Element("AanmeldTijd").Value
};
答案 1 :(得分:0)
这是因为Select
是IEnumerable
的扩展名,但您选择的是单个元素。对可枚举进行查询,并在结尾处应用SingleOrDefault
:
DagUren eenDagUren
= (from du in doc.Elements("DagUren")
select new DagUren
{
Chauffeur = du.Element("Chauffeur").Value,
Gewerkt = du.Element("Gewerkt").Value,
Pauze = du.Element("Pauze").Value,
AanmeldTijd = du.Element("AanmeldTijd").Value,
}).SinleOrDefault();
或简单(因此您只有一个要解析的节点,即root)。还要考虑使用节点转换,而不是阅读Value
属性:
XElement root = doc.Root;
DagUren eenDagUren = new DagUren() {
Chauffeur = (string)root.Element("Chauffeur"),
Gewerkt = (TimeSpan)root.Element("Gewerkt"),
Pauze = (bool)root.Element("Pauze"), // e.g.
AanmeldTijd = (DateTime)root.Element("AanmeldTijd") });