XML解析以获取XElement列表中的特定标记值

问题描述

我下面有XML和c#代码。 我想在333,382标签显示的列表中获取类似<Event >的值的列表。

但是通过下面的代码,我得到了整个事件标签的列表,例如{ Event = "333" },{ Event = "382" }

enter image description here

我可以编写更多的逻辑来仅从中获取数字部分,但为了提高代码效率,最好通过LINQ在eventList自身中获取所需的值,例如333,382

有人可以帮忙吗?预先感谢。

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

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string eventListXML= @"<XYZ>
                                    <Task>
                                        <ABC>
                                            <EvtLogResponse>
                                                <LogInfo>
                                                    <CommID>8</CommID>
                                                    <UserId>2</UserId>
                                                    <Date>10/09/2020</Date>
                                                    <Time>06:24:01 PM</Time>
                                                </LogInfo>
                                                <EventLogallRes>
                                                    <EventOrRestore>E</EventOrRestore>
                                                    <Event>333</Event>
                                                </EventLogallRes>
                                                <EventLogallRes>
                                                    <EventOrRestore>E</EventOrRestore>
                                                    <Event>382</Event>
                                                </EventLogallRes>
                                                <FilePath>C:\Windows\test.txt</FilePath>
                                            </EvtLogResponse>
                                            <UserID>1</UserID>
                                        </ABC>
                                    </Task>
                                </XYZ>";

            XDocument xDoc = XDocument.Parse(eventListXML);
            XElement Xele = xDoc.Element("XYZ").Element("Task").Element("ABC").Element("EvtLogResponse");
            List<XElement> Logs = Xele.Elements("EventLogallRes").ToList<XElement>();


            var eventList = (from Event in Logs.Descendants("Event")
                             select new
                             {
                                 Event = Event.Value

                             }).ToList();
             
        }
    }
}

解决方法

您希望它像整数列表一样吗?

只需删除一个新的事件和如下代码即可

var eventList = (from Event in Logs.Descendants("Event")
                                 select 
                                     Regex.Replace(Event.Value.ToString(),"[^0-9]+",string.Empty)).ToList();

如果您要用逗号分隔值,则将下面的代码添加到上面的代码中。

var result = String.Join(",",eventList);

结果将以逗号分隔的字符串。

让我知道是否还需要其他任何东西。