这个XML片段可以用LINQ解析吗?

这个XML片段可以用LINQ解析吗?,xml,linq,Xml,Linq,是否可以使用linq解析以下XML格式?它有多个属性,我需要解析LogRecord节点中的每个记录 <?xml version="1.0"?> <SignedLogs> <Header IP="::000.000.000.000" Port="0000" ET="0021" CS="568 47" FormatVersion="01.01.01" RefName="CE42xx" /> <Logs NumOfRec="1" Creatio

是否可以使用linq解析以下XML格式?它有多个属性,我需要解析LogRecord节点中的每个记录

<?xml version="1.0"?>
<SignedLogs>
   <Header IP="::000.000.000.000" Port="0000" ET="0021" CS="568 47" FormatVersion="01.01.01"  RefName="CE42xx"  />
   <Logs NumOfRec="1" CreationDate="2013/09/05 07:42">
      <LogRecord DeliveryDate="Mon Jul 29 02:40:32 2013 UTC" AK="00" SN="" RC2="xxxxx2" NC="0000000000000000" C="00000000" NUID="ascdsadas" ViD="0000000000000000"/>
      <LogRecord DeliveryDate="Tue Jul 30 02:40:32 2013 UTC" AK="10" SN="" RC2="xxdsdx2" NC="0000000000000000" C="00000000" NUID="789" ViD="0000900000000000"/>
   </Logs>
</SignedLogs>

日志记录中每行所需的数据: 交货日期,AK,序列号,RC2,NC,C,NUID,ViD

谢谢

它将返回匿名类型对象的列表。

您可以尝试以下操作:

string xml = @"<?xml version='1.0'?>
<SignedLogs>
   <Header IP='::000.000.000.000' Port='0000' ET='0021' CS='568 47' FormatVersion='01.01.01'  RefName='CE42xx'  />
   <Logs NumOfRec='1' CreationDate='2013/09/05 07:42'>
      <LogRecord DeliveryDate='Mon Jul 29 02:40:32 2013 UTC' AK='00' SN='' RC2='xxxxx2' NC='0000000000000000' C='00000000' NUID='ascdsadas' ViD='0000000000000000'/>
      <LogRecord DeliveryDate='Tue Jul 30 02:40:32 2013 UTC' AK='10' SN='' RC2='xxdsdx2' NC='0000000000000000' C='00000000' NUID='789' ViD='0000900000000000'/>
   </Logs>
</SignedLogs>";

XDocument doc = XDocument.Parse(xml); 
IEnumerable<XElement> logRecordNodeList = doc.Descendants("LogRecord"); //get the LogRecord node.
var logs = (from r in logRecordNodeList
           select new
           {
                DeliveryDate = r.Attribute("DeliveryDate").Value,
                AK = r.Attribute("AK").Value,
                SN = r.Attribute("SN").Value,
                RC2 = r.Attribute("RC2").Value,
                NC = r.Attribute("NC").Value,
                C = r.Attribute("C").Value,
                NUID = r.Attribute("NUID").Value,
                ViD = r.Attribute("ViD").Value
           }).ToList();

foreach (var log in logs)
{
    Console.Write("Delivery Date: ");
    Console.WriteLine(log.DeliveryDate);
    Console.Write("AK: ");
    Console.WriteLine(log.AK);
    Console.Write("SN: ");
    Console.WriteLine(log.SN);
    Console.Write("RC2: ");
    Console.WriteLine(log.RC2);
    Console.Write("NC: ");
    Console.WriteLine(log.NC);
    Console.Write("C: ");
    Console.WriteLine(log.C);
    Console.Write("NUID: ");
    Console.WriteLine(log.NUID);
    Console.Write("ViD: ");
    Console.WriteLine(log.ViD);
}
stringxml=@”
";
XDocument doc=XDocument.Parse(xml);
IEnumerable logRecordNodeList=文档子体(“LogRecord”)//获取日志记录节点。
var logs=(来自logRecordNodeList中的r)
选择新的
{
DeliveryDate=r.属性(“DeliveryDate”).值,
AK=r.属性(“AK”).值,
SN=r.属性(“SN”).值,
RC2=r.属性(“RC2”).值,
NC=r.属性(“NC”).值,
C=r.属性(“C”).值,
NUID=r.属性(“NUID”).值,
ViD=r.属性(“ViD”).值
}).ToList();
foreach(var登录日志)
{
控制台。写入(“交付日期:”);
Console.WriteLine(log.DeliveryDate);
控制台。写入(“AK:”);
Console.WriteLine(log.AK);
控制台。写入(“序号:”);
控制台写入线(日志序列号);
Console.Write(“RC2:”);
控制台写入线(log.RC2);
控制台。写入(“NC:”);
控制台写入线(log.NC);
控制台。写(“C:”);
控制台写入线(log.C);
Console.Write(“NUID:”);
Console.WriteLine(log.NUID);
控制台。写入(“ViD:”);
控制台写入线(log.ViD);
}

请确保您可以解析此XML

您没有说您使用哪种语言,所以让我借此机会宣传VB.Net的xml文本:

Dim xml = <?xml version="1.0"?>
            <SignedLogs>
                <Header IP="::000.000.000.000" Port="0000" ET="0021" CS="568 47" FormatVersion="01.01.01"  RefName="CE42xx"  />
                <Logs NumOfRec="1" CreationDate="2013/09/05 07:42">
                    <LogRecord DeliveryDate="Mon Jul 29 02:40:32 2013 UTC" AK="00" SN="" RC2="xxxxx2" NC="0000000000000000" C="00000000" NUID="ascdsadas" ViD="0000000000000000"/>
                    <LogRecord DeliveryDate="Tue Jul 30 02:40:32 2013 UTC" AK="10" SN="" RC2="xxdsdx2" NC="0000000000000000" C="00000000" NUID="789" ViD="0000900000000000"/>
                </Logs>
            </SignedLogs>

For Each logrecord in xml...<LogRecord>
    Console.WriteLine(String.Format("{0}: {1}", logrecord.@AK, logrecord.@RC2))
Next

maya,请使用正确的格式并阅读关于如何发布问题的帮助页面对不起,你的意思是什么,这是我需要解析的XML格式,问题的格式非常糟糕,我必须编辑它以获得正常的格式。我仍然不明白你是否只是想用这种格式创建一个XML,或者改变当前的格式或者什么?如果需要DateTime:DeliveryDate=DateTime.ParseExact((string)x.Attribute(“DeliveryDate”),“ddd MMM dd HH:mm:ss yyyy UTC”,CultureInfo.InvariantCulture)不能投票,没有足够的分数。但是这个答案真的很有帮助@mayazakry如果它帮助你解决问题,你可以将其标记为已接受。Mayaskry考虑接受你认为是最有用的或者至少是投票的答案,干杯!我真的很想投票,但是我没有足够的分数。对不起,我刚加入
Dim xml = <?xml version="1.0"?>
            <SignedLogs>
                <Header IP="::000.000.000.000" Port="0000" ET="0021" CS="568 47" FormatVersion="01.01.01"  RefName="CE42xx"  />
                <Logs NumOfRec="1" CreationDate="2013/09/05 07:42">
                    <LogRecord DeliveryDate="Mon Jul 29 02:40:32 2013 UTC" AK="00" SN="" RC2="xxxxx2" NC="0000000000000000" C="00000000" NUID="ascdsadas" ViD="0000000000000000"/>
                    <LogRecord DeliveryDate="Tue Jul 30 02:40:32 2013 UTC" AK="10" SN="" RC2="xxdsdx2" NC="0000000000000000" C="00000000" NUID="789" ViD="0000900000000000"/>
                </Logs>
            </SignedLogs>

For Each logrecord in xml...<LogRecord>
    Console.WriteLine(String.Format("{0}: {1}", logrecord.@AK, logrecord.@RC2))
Next
00: xxxxx2
10: xxdsdx2