C# LINQ-在元素中获取元素
我想从XML文件中提取信息,请参见下面代码的特定部分: 2014-07-02 30692 阿塞特过滤器 0 雷维西翁30000 0 2015-03-27 63984 阿塞特过滤器 0 雷维西翁60000 0 埃斯科比拉斯 0 特殊过滤器 0 如您所见,它有多个,其中有多个。我想要的输出是这样的:C# LINQ-在元素中获取元素,c#,xml,vb.net,linq,C#,Xml,Vb.net,Linq,我想从XML文件中提取信息,请参见下面代码的特定部分: 2014-07-02 30692 阿塞特过滤器 0 雷维西翁30000 0 2015-03-27 63984 阿塞特过滤器 0 雷维西翁60000 0 埃斯科比拉斯 0 特殊过滤器 0 如您所见,它有多个,其中有多个。我想要的输出是这样的: 2014-07-02 30692 Filtro de aceite 2014-07-02 30692 Revisión 30000 2015-03-27 63984 Filtro de aceite 2
2014-07-02 30692 Filtro de aceite
2014-07-02 30692 Revisión 30000
2015-03-27 63984 Filtro de aceite
2015-03-27 63984 Revisión 60000
2015-03-27 63984 Escobillas
2015-03-27 63984 Filtro de partículas
我没有问题去提取,甚至我提取了,但是我不能马上做。这是我当前在x1000次不同尝试后的糟糕代码…:
对于document.DegenantsActivity中的每个描述作为元素
carRepairDesc=desc.element说明
对于document.degenantsMaintenanceHistory中作为元素的每个选项
carredPairDate=options.element维修日期.Value
carRepairKMs=options.element里程数.Value
下一个
Console.WriteLineCorrepairDate&carRepairKMs&km&carRepairDesc
下一个
此代码的输出略有不同:
2015-12-28 96833km Filtro de aceite
2015-12-28 96833km Revisión 30000
2015-12-28 96833km Filtro de aceite
2015-12-28 96833km Revisión 60000
2015-12-28 96833km Escobillas
2015-12-28 96833km Filtro de particulas
我希望你有任何建议
编辑:
感谢@Hybridzz,以下是VB.Net中的解决方案:
将文档作为XDocument=XDocument.LoadPATH调整为XML
Dim MHHISTORY=来自文档中的r。子代维护历史选择新建{
Key.RepairDate=r.element RepairDate.Value,
Key.miliness=r.element miliness.Value,
Key.ActivityDescs=r.genderantsactivity。[选择]Functionx x.ElementDescription.Value
}
对于历史上的每个r
对于r.ActivityDecs中的每个activityDesc
Console.WriteLineString.Format{0}{1}{2}{3},r.RepairDate,r.miliety,activityDesc,Environment.NewLine
下一个
下一个
这是一个c版本,但您可以更改为VB.net
XDocument document = XDocument.Load(@"PATH TO XML");
var mHistory = from r in document.Descendants("MaintenanceHistory")
select new
{
RepairDate = r.Element("RepairDate").Value,
Mileage = r.Element("Mileage").Value,
ActivityDescs = r.Descendants("Activity").Select(x => x.Element("Description").Value)
};
foreach (var r in mHistory)
{
foreach (var activityDesc in r.ActivityDescs)
{
Console.WriteLine(string.Format("{0} {1} {2} {3}", r.RepairDate, r.Mileage, activity, Environment.NewLine));
}
}
输出是
2014-07-02 30692 Filtro de aceite
2014-07-02 30692 Revisión 30000
2015-03-27 63984 Filtro de aceite
2015-03-27 63984 Revisión 60000
2015-03-27 63984 Escobillas
2015-03-27 63984 Filtro de particulas
它就像一个符咒。你救了我一天!你能解释一下密码吗?我不明白mHistory var部分到底是如何工作的。谢谢!这就是linq的美妙之处,我们正在从xml数据动态创建新对象选择“新建”将创建具有定义属性的新对象。我将在将来使用它,当然。再次感谢你。