我做了研究,发现了大约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;
答案 0 :(得分:0)
您可以尝试使用动态 XML DOCUMENT TO A DYNAMIC OBJECT IN .NET
答案 1 :(得分:0)
只需将值添加到属性(&#34;名称&#34;) - 属性(&#34;名称&#34;)。值==&#34; smth&#34;
答案 2 :(得分:-1)
删除了&#34;数据&#34;来自后代并且它有效。