我做了研究並發現了大約10個不同的主題,提出了類似的問題。我還發現了不同的方式來做到這一點:linq,xpath等C#xml文檔按屬性查找值
我嘗試了所有這些,但我從來沒有得到任何結果。它總是'空'。
所以這裏是我的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;