繁体   English   中英

使用Linq或.Net中的任何其他方式根据条件从XML提取记录

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM