0

I have a payload in XMLDocument object as mentioned below. I want to get a specific node value of ar_invoice_detail_id by using filter options or by using where clause (i will be having some id to filter to that node value). It would be better if i get solution using LINQ rather than using foreach and accessing each row. Thanks in advance!!

PAYLOAD :-

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <control>
        <status>success</status>
        <uniqueid>false</uniqueid>
        <dtdversion>3.0</dtdversion>
    </control>
    <operation>
        <authentication>
            <status>success</status>
            <sessiontimestamp>2020-07-23T11:50:35+00:00</sessiontimestamp>
            <sessiontimeout>2020-07-23T23:50:35+00:00</sessiontimeout>
        </authentication>
        <result>
            <status>success</status>
            <function>readByQuery</function>
            <controlid>59eaaa7d-ebc4-407f-9eff-030a45c382bc</controlid>
            <data listtype="ar_invoice_detail_commission" count="22" totalcount="22" numremaining="0" resultId="">
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>27570</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>27572</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35026</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35072</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35074</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35078</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35080</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35231</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35233</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35235</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35236</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35238</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35264</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35265</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35280</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35281</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35282</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35283</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35313</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35315</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35239</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
                <ar_invoice_detail_commission>
                    <ar_invoice_detail_id>35240</ar_invoice_detail_id>
                </ar_invoice_detail_commission>
            </data>
        </result>
    </operation>
</response>
  • XmlDocument doesn't support Linq-queries. Use a XDocument instead. – CShark Jul 23 '20 at 13:29
  • I can't change my XmlDocument to XDocument as i have already used it's object in many scenarios. So i will be continuing to use this XmlDocument object only. – Abhijeet Musale Jul 23 '20 at 13:35
  • You can freely switch between them if needed. As I said, XmlDocument does not support Linq-Queries, You'll be stuck with the manual way. https://stackoverflow.com/questions/1508572/converting-xdocument-to-xmldocument-and-vice-versa – CShark Jul 23 '20 at 13:36

1 Answers1

0

Use Xml Ling and create a dictionary

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication11
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            Dictionary<string, XElement> dict = doc.Descendants("ar_invoice_detail_commission")
                .GroupBy(x => (string)x.Element("ar_invoice_detail_id"), y => y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
}
jdweng
  • 33,250
  • 2
  • 15
  • 20