[英]Fetching record from XML on the base of condition using Linq or any other way in .Net
我是LINQ的新手,并尝试使用LINQ从XML文档中获取记录,因此请在以下情况下为我提供帮助:
XML文件:
<ParsedResultSet>
<Orders_Renewals>
<file_line_number>1</file_line_number>
<issn>15338606</issn>
<publisher_title_reference>ABC</publisher_title_reference>
<journal_title>Music</journal_title>
<publisher_subscription_reference>54562</publisher_subscription_reference>
<agent_subscription_reference>86031</agent_subscription_reference>
</Orders_Renewals>
<Orders_Renewals>
<file_line_number>2</file_line_number>
<issn>15338606</issn>
<publisher_title_reference></publisher_title_reference>
<journal_title>Music1</journal_title>
<publisher_subscription_reference>598782</publisher_subscription_reference>
<agent_subscription_reference>86276</agent_subscription_reference>
</Orders_Renewals>
<Orders_Renewals>
<file_line_number>3</file_line_number>
<issn>15338606</issn>
<publisher_title_reference>DEF</publisher_title_reference>
<journal_title>Music2</journal_title>
<publisher_subscription_reference>507682</publisher_subscription_reference>
<agent_subscription_reference>31276</agent_subscription_reference>
</Orders_Renewals>
</ParsedResultSet>
我的搜索条件如下:
Select publisher_title_reference from Orders_Renewals where publisher_subscription_reference = '598782'and agent_subscription_reference = '31276'
结果应为: XYZ
我已经尝试使用以下代码,但没有得到任何输出:
string xmlPath = @"D:\Temp\FileState" + "_" + xmlFileID;
XDocument xml = XDocument.Load(xmlPath);
var XMLOrderCodeNode = from n in xml.Elements("Orders_Renewals")
where n.Attribute("agent_subscription_reference").Value.ToString().Trim() == agentRefNbr
select n.Attribute("publisher_title_reference").Value.ToString().Trim();
请帮助我解决这种情况,并提前谢谢。
agent_subscription_reference
和publisher_title_reference
不是属性。 使用此查询获取Descendants
,然后找到元素:
var XMLOrderCodeNode = from n in xml.Descendants("Orders_Renewals")
where n.Element("agent_subscription_reference").Value.ToString().Trim() == agentRefNbr
select n.Element("publisher_title_reference").Value.ToString().Trim();
当agent_subscription_reference
等于31276
,它应返回DEF
而不是XYZ
如您所提到的。
请尝试以下代码。 您可以根据需要添加要过滤的位置:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
var orders = doc.Descendants("Orders_Renewals").Select(x => new {
file_line_number = (int)x.Element("file_line_number"),
issn = (string)x.Element("issn"),
reference = (string)x.Element("publisher_title_reference"),
title = (string)x.Element("journal_title"),
subscription = (string)x.Element("publisher_subscription_reference"),
agent = (int)x.Element("agent_subscription_reference")
}).ToList();
int agentRefNbr = 86031;
var results = orders.Where(x => x.agent == agentRefNbr).ToList();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.