Выбор 2 элементов из XMLC#

Место общения программистов C#
Anonymous
Выбор 2 элементов из XML

Сообщение Anonymous »

У меня возникли большие проблемы с переводом примеров, которые я нашел для использования с XML.
Начну с этого (очень урезанная версия всего XML-файла)

Код: Выделить всё




NeverSeen
10


AlsoNeverSeen
20



Я пытаюсь создать упорядоченный список из двух полей, который, в конечном итоге, я надеюсь вернуть в виде списка кортежей

Код: Выделить всё

'NeverSeen'         10
'AlsoNeverSeen'     20
Ниже приведен список нескольких подходов, которые я опробовал. В основном они включены для того, чтобы показать, что я приложил усилия, прежде чем обращаться за помощью.
Я бы Мне бы хотелось помочь мне найти правильный путь для решения этой конкретной проблемы, но также есть ли у кого-нибудь предложения по достойному, нетривиальному руководству по LINQ для XML.
Я должен сказать, что я исходящий из базы данных; 30 секунд в SQL - 5 дней для XML и LINQ.
Я также путаюсь в разных подходах - и, вероятно, случайно смешиваю их
например, те, которые используют "from"

Код: Выделить всё

var schema3 = from el in XDoc.Elements("MetadataDomain")
where (String)el.Attribute("DomainUUID") == pDomainUUID
select (el);
затем повторите el, даже если он только один.
Или те, которые не используют «from», но используют « .'

Код: Выделить всё

var schema4 = XDoc.Elements("MetadataDomain")
.Where(sch => (String)sch.Attribute("DomainUUID") == pDomainUUID)
.Select(sch => (String)sch.Element("SchemaName").Value);
тогда вам все равно придется перебирать результат, даже если он только один.
Я был в восторге от XPath, например

Код: Выделить всё

string schema5 = root.XPathSelectElement($"MetadataSets/MetadataDomain[@DomainUUID='{pDomainUUID}']").Element("SchemaName").Value;
Но это не так, потому что все это находится в одной строке, поэтому в случае сбоя нет возможности что-либо отладить. И почти все, что вы вводите, будет скомпилировано.
И как мне выбрать 2 «поля», например, некоторые говорят, что для выбора 2 «полей» используются анонимные типы, например

Код: Выделить всё

 select new { car.Make, car.VIN}
when I try that with XML
where (String)el.Attribute("MetadataSetID") == pMetadataSetID
select new { el.Element("TagName").Value, el.Element("ItemSeq").Value } ;
Я получаю ошибку компиляции

Ошибка CS0833: анонимный тип не может иметь несколько свойств с одинаковым именем

Похоже, компилятор не может отличить их друг от друга, и я не знаю, как их назвать.
Спасибо
Джей Си

Подробнее здесь: https://stackoverflow.com/questions/787 ... s-from-xml

Вернуться в «C#»