[英]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.