#c# #xml
Вопрос:
У меня есть следующий xml, который включает событие Windows:
<?xml version="1.0"?> -
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="LMS" />
<EventID Qualifiers="32768">2125</EventID>
<Level>4</Level>
<Task>3</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2021-05-30T14:05:07.077547800Z" />
<EventRecordID>89958</EventRecordID>
<Channel>Application</Channel>
<Computer></Computer>
<Security/>
</System>
<EventData>
<Data> </Data>
</EventData>
</Event>
Я хочу преобразовать этот XML в словарь на c#, он работает нормально, но проблема в том, что в свойствах «Имя поставщика» и «Время создания» я получаю значение null.
Есть идеи, как я могу получить такие значения, как: «LMS» и «2021-05-30T14:05:07.077547800 Z» ?
Вот код для преобразования XML в словарь:
var xmlFile = File.ReadAllText(log);
XDocument doc = XDocument.Parse(xmlFile);
Dictionary<string, string > dataDictionary = new Dictionary <string, string >();
foreach(XElement element in doc.Descendants().Where(p => p.HasElements ==false))
{
int keyInt = 0;
string keyName = element.Name.LocalName;
while (dataDictionary.ContainsKey(keyName))
{
keyName = element.Name.LocalName "_" keyInt ;
}
dataDictionary.Add(keyName,
element.Value);
}
Ответ №1:
Следующее проверяет, есть ли у XML-узла какие-либо атрибуты, и если да, то получит значение атрибута и добавит значение словаря с ключом в формате nodeName_attributeName
:
var xmlFile = File.ReadAllText(log);
XDocument doc = XDocument.Parse(xmlFile);
Dictionary<string, string > dataDictionary = new Dictionary <string, string >();
foreach(XElement element in doc.Descendants().Where(p => p.HasElements ==false))
{
int keyInt = 0;
string keyName = element.Name.LocalName;
while (dataDictionary.ContainsKey(keyName))
{
keyName = element.Name.LocalName "_" keyInt ;
}
dataDictionary.Add(keyName, element.Value);
if (element.HasAttributes)
{
var lmsAttribute = element.FirstAttribute;
if (lmsAttribute != null)
{
dataDictionary.Add($"{keyName}_{lmsAttribute.Name.LocalName}", lmsAttribute.Value);
}
}
}
Окончательный словарь выглядит так:
{
"Provider": "",
"Provider_Name": "LMS",
"EventID": "2125",
"EventID_Qualifiers": "32768",
"Level": "4",
"Task": "3",
"Keywords": "0x80000000000000",
"TimeCreated": "",
"TimeCreated_SystemTime": "2021-05-30T14:05:07.077547800Z",
"EventRecordID": "89958",
"Channel": "Application",
"Computer": "",
"Security": "",
"Data": ""
}