2013-04-23 2 views
0

I имеет следующую структуру XML:LINQ к XML - получить childrem этих узлов с определенным атрибутом

<partners> 
    <partner partner="xxxxxx" Id="12345"> 
    <email>[email protected]</email> 
    <email>[email protected]</email> 
    </partner> 
    <partner partner="yyyyyyy" Id="32165"> 
    <email>[email protected]</email> 
    <email>[email protected]</email> 
    </partner> 
</partners> 

Я пытаюсь получить все адреса электронной почты определенного партнера из ID, но может» t получить его.

Я попытался это до сих пор:

var x = from a in xdoc.Elements("partner") where a.Attribute("Id").Value == rpId.ToString() select a.Value; 

Любые идеи, что это не так?

ответ

3

В настоящее время вы просто выбираете текст в соответствующих элементах партнера - и в итоге вы получите последовательность результатов.

Я думаю, что вы хотите:

var query = xdoc.Root.Elements("partner") 
       .Single(x => (string) x.Attribute("Id") == rpId.ToString()) 
       .Elements("email") 
       .Select(x => x.Value); 

Это будет ошибкой, если нет элементов с заданным идентификатором - или более чем один. Если вы просто хотите, чтобы найти все адреса электронной почты во всех согласующих элементов, вы можете использовать:

var query = xdoc.Root.Elements("partner") 
       .Where(x => (string) x.Attribute("Id") == rpId.ToString()) 
       .Elements("email") 
       .Select(x => x.Value); 

EDIT: Я изменил xdoc.Elements к xdoc.Root.Elements данных замечаний; Я подозреваю, что у вас есть:

XDocument xdoc = XDocument.Load(...); 

Это означает, что xdoc.Elements(...) можно найти только корневой элемент - в то время как вы хотите найти из корневого элемента.

+0

hmmm - это пустая последовательность, даже если я свожу запрос к следующему: var query = xdoc.Elements ("partner"). Где (x => (строка) x.Attribute ("Id") = = rpId.ToString()) – ChrisCa

+0

@ChrisCa: Тогда это говорит о том, что нет соответствующих элементов 'partner'. Есть много потенциальных причин для этого, но я не могу проверить их. Первое, что нужно проверить, - что вы получаете элементы «партнера» вообще. Удалите предложение 'Where' и посмотрите, что произойдет. Затем проверьте атрибуты 'Id' и' rpId' ... –

+0

на самом деле, даже это пусто: var query = xdoc.Elements («partner»); – ChrisCa

Смежные вопросы