通过筛选获取XmlDocument特定的节点值



XMLDocument对象中有一个负载,如下所述。我想通过使用filter选项或使用where子句来获得ar_invoice_detail_id的特定节点值(我将有一些id要过滤到该节点值(。如果我使用LINQ获得解决方案,而不是使用foreach和访问每一行,那会更好。提前感谢!!

有效载荷:-

<?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>

使用Xml Ling并创建字典

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:temptest.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());
        }
    }
}

最新更新