Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML解析以获取XElement列表中的特定标记值_C#_Xml_Linq_Xelement - Fatal编程技术网

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

C# XML解析以获取XElement列表中的特定标记值,c#,xml,linq,xelement,C#,Xml,Linq,Xelement,我有下面的XML和c代码。 我想在标签中显示的列表中获得像333382这样的值列表 然而,通过下面的代码,我得到了整个事件标记的列表,比如{Event=333},{Event=382} 我可以编写更多的逻辑代码,只从中获得数字部分,但为了代码效率,最好通过LINQ在事件列表中获得所需的值,如333382 有人能帮忙吗?提前谢谢 using System; using System.Collections.Generic; using System.Linq; using System.Text.

我有下面的XML和c代码。 我想在标签中显示的列表中获得像333382这样的值列表

然而,通过下面的代码,我得到了整个事件标记的列表,比如{Event=333},{Event=382}

我可以编写更多的逻辑代码,只从中获得数字部分,但为了代码效率,最好通过LINQ在事件列表中获得所需的值,如333382

有人能帮忙吗?提前谢谢

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);
这里的结果将使用逗号分隔的字符串


如果还需要更多信息,请告诉我。

看起来您只需要删除新的{Event=和相应的}。虽然是尾随,但我想知道是否还有更多代码。var values=XDocument.ParseeventListXML.ElementXYZ.ElementTask.ElementABC.ElementEvtLogResponse.ElementsEventLogAllRes.Selectx=>x.ElementEvent.Value@谢谢你!请你把它作为一个答案,我也会接受的。试试下面的:Event.SetValuestring.Empty;Thx,但不是很优雅的答案。喜欢像@Price Khanna这样的较轻的东西。您还可以使用XPath查询,如EXDocument.ParseeventListXML.XPathSelectElements//Event.Selectx=>x.Value。