C#xml文档按属性查找值

时间:2017-07-26 11:32:42

标签: c# xml linq xpath

我做了研究,发现了大约10个不同的主题,提出了类似的问题。我也发现了不同的方法:linq,xpath等。

我尝试了所有这些,但我从来没有得到任何结果。它永远是' null'。

所以这是我的xml;我希望 OpCorrelation为字符串

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
  <Provider Name="Microsoft-Windows" Guid="{123}" /> 
  <EventID>12</EventID> 
  <Version>0</Version> 
  <Level>0</Level> 
  <Task>1</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x1110000000000000</Keywords> 
  <TimeCreated SystemTime="2017-07-26T11:08:06.899918600Z" /> 
  <EventRecordID>3333</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="2" ThreadID="3" /> 
  <Channel>Security</Channel> 
  <Computer>test</Computer> 
  <Security /> 
</System>
<EventData>
  <Data Name="OpCorrelationID">{abc}</Data> 
  <Data Name="AppCorrelationID">-</Data> 
  <Data Name="SubjectUserSid">123-S-123</Data> 
  <Data Name="SubjectUserName">TestUser</Data> 
  <Data Name="SubjectDomainName">TEST</Data> 
  <Data Name="SubjectLogonId">0x3a111</Data> 
  <Data Name="DSName">test.local</Data> 
  <Data Name="DSType">%%14111</Data> 
  <Data Name="ObjectDN">cn=bbbbb bb. bbb,OU=test,OU=Test123,DC=test,DC=local</Data> 
  <Data Name="ObjectGUID">{DF0F5628-70DA-4AC4-B72E-111111111}</Data> 
  <Data Name="ObjectClass">user</Data> 
  <Data Name="AttributeLDAPDisplayName">pwdLastSet</Data> 
  <Data Name="AttributeSyntaxOID">2.5.5.16</Data> 
  <Data Name="AttributeValue">131455408816821756</Data> 
  <Data Name="OperationType">%%14675</Data> 
</EventData>

以下是我尝试的代码:

string OpCorrelationID = (string)XDocument.Parse(record.ToXml()).Descendants("Data").FirstOrDefault(d => (string)d.Attribute("Name") == "OpCorrelationID");

string OpCorrelationID = XDocument.Parse(record.ToXml()).XPathSelectElement("descendant::Data[@Name='OpCorrelationID']").Value;

3 个答案:

答案 0 :(得分:0)

您可以尝试使用动态 XML DOCUMENT TO A DYNAMIC OBJECT IN .NET

答案 1 :(得分:0)

只需将值添加到属性(&#34;名称&#34;) - 属性(&#34;名称&#34;)。值==&#34; smth&#34;

答案 2 :(得分:-1)

删除了&#34;数据&#34;来自后代并且它有效。