【问题标题】:Get collection of same element value from xml using linq使用linq从xml获取相同元素值的集合
【发布时间】:2016-08-01 11:02:40
【问题描述】:

这是我的 xml 代码

<?xml version="1.0" encoding="utf-8"?>
 <Event xmlns="">
<System>
  <Provider Name="" /> 
  <EventID>4624</EventID> 
  <Version>0</Version> 
  <Level>0</Level> 
  <Task>12544</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x0000</Keywords> 
  <TimeCreated SystemTime="20Z" /> 
  <EventRecordID>911588</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="608" ThreadID="704" /> 
  <Channel>Security</Channel> 
  <Computer></Computer> 
  <Security /> 
  </System>
 <EventData>
  <Data Name="SubjectUserSid">S-1-0-0</Data> 
  <Data Name="SubjectUserName">-</Data> 
  <Data Name="SubjectDomainName">-</Data> 
  <Data Name="SubjectLogonId">0x0</Data> 
  <Data Name="TargetUserSid">S1937-12707</Data> 
  <Data Name="TargetUserName"></Data> 

  </EventData>
  </Event>

我想获取所有Data节点的Name属性值和元素值

我试过了,

    XmlDocument xmlDoc = new XmlDocument();
          try
          {
              xmlDoc.Load("C:\\Users\\bk.koc\\Desktop\\Gelenxml.xml");

              foreach (XmlNodeList node in xmlDoc.GetElementsByTagName("Data"))
              {
                  MessageBox.Show(node.Attributes["Name"].Value);
                  MessageBox.Show(node["Name"].Value);
              }

我得到了所有的名字,但这给了我一个错误。

“System.NullReferenceException”类型的未处理异常 发生在 WindowsFormsApplication4.exe

附加信息:对象引用未设置为 对象。

如何解决这个问题

【问题讨论】:

  • 查看我更新的代码,希望能解决你的问题

标签: c# xml linq xml-parsing


【解决方案1】:

你可以得到这个

XDocument doc = XDocument.Load(@"C:\Users\bk.koc\Desktop\Gelenxml.xml");
var a = from m in doc.Descendants("EventData").Elements("Data")
         select new
          {
            Name = m.Attribute("Name").Value,
            Value = m.Value

          };

然后

foreach (var v in a)
   {
       MessageBox.Show(v.Name);
       MessageBox.Show(v.Value);

   }

更新 我用过这个xml

<?xml version="1.0" encoding="utf-8"?>
<EventData>
  <Data Name="SubjectUserSid">S-1-0-0</Data> 
  <Data Name="SubjectUserName">-</Data> 
  <Data Name="SubjectDomainName">-</Data> 
  <Data Name="SubjectLogonId">0x0</Data>
</EventData>

【讨论】:

  • 你能重新控制你的代码吗?我认为它会起作用,但是一些括号错误给我我无法修复。
  • 我尝试过,但它什么也没给我。没有消息没有错误。我调试了跳过的foreach循环。我不明白。
  • 你的xml开头有&lt;?xml version="1.0" encoding="utf-8"?&gt;吗?因为这段代码使用你的 xml 对我有用
  • 是的,谢谢,但你能重新控制我的问题吗?我重写了 xml 文档。我认为我无法到达
  • 是的,您可以使用相同的方式访问它,只需使用代码即可
【解决方案2】:
node.Attributes["Name"]

返回正确的XmlAttribute,您可以访问该XmlAttribute 实例的Value 属性。

node["Name"]

尝试返回名为"Name" 的第一个子元素,但由于您的Data 标签没有 元素,node["Name"] 返回null .

因此,当您尝试访问node["Name"]Value 属性时,会引发NullReferenceException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多