У меня есть XML-файл, и мне нужно извлечь все значения атрибутов из XML. Я попробовал следующее, но мне нужно это в Linq. Может ли кто-нибудь вести меня, как это сделать.Получите все значения атрибутов по имени атрибута из файла XML, используя Linq to XML.
Пример XML
<MapFile>
<Import>
<field name1="BorrowId" name2="EMPLID" />
<field name1="Firstname" name2="COMPLETENAME" />
<field name1="Address" name2="Address" Reference="Location" />
</Import>
<Location>
<Lookup Key="CC" Replace="1" />
<Lookup Key="CE" Replace="2" />
</Location>
</MapFile>
Ожидаемый результат
[0]:
CurrentVal = "BorrowId"
NewVal = "EMPLID"
Reference = null
ReferenceList = null
[1]:
CurrentVal = "Firstname"
NewVal = "COMPLETENAME"
Reference = null
ReferenceList = null
[2]:
CurrentVal = "Address"
NewVal = "Address"
Reference = "Location"
ReferenceList = [0]:
Key = "CC"
Value = "1"
[1]:
Key = "CE"
Value = "2"
Код
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@sPath);
var attrValues = xmlDoc.GetElementsByTagName("field");
List<MapFileModel> MapFileMod = new List<MapFileModel>();
foreach (XmlNode x in attrValues)
{
MapFileModel _objMapFile = new MapFileModel();
if (x.Attributes["name1"] != null)
{
_objMapFile.CurrentVal = x.Attributes["name1"] != null ? x.Attributes["name2"].Value : null;
_objMapFile.NewVal = x.Attributes["name2"] != null ? x.Attributes["name2"].Value : null;
_objMapFile.Reference = x.Attributes["Reference"] != null ? x.Attributes["Reference"].Value : null;
}
MapFileMod.Add(_objMapFile);
}
Ну, я хотел бы начать с помощью LINQ к XML, который является * много * более чистый API, чем 'XmlDocument', и многое другое LINQ. Теперь, судя по вашему коду, похоже, что у вас больше требований, чем «я должен извлечь все значения атрибутов» - пожалуйста, выражайте их в своем вопросе. Пока неясно, что именно вы просите в данный момент. –
К сожалению, я не видел никаких других требований, кроме извлечения количества значений атрибутов. – DonMax
Тогда почему ваш код имеет все эти строковые литералы для поиска * конкретных * атрибутов? Простое извлечение «всех значений атрибутов» так же просто, как 'doc.Descendants(). SelectMany (x => x.Attributes(). Выберите (a => a.Value))'. Я подозреваю, что это не то, что вы хотите - это просто даст вам «IEnumerable» - последовательность всех значений атрибутов. Это поможет, если вы предоставите короткий образец XML-документа и ожидаемый результат ... –