Linq to XML Вопросы: почему мой запрос не работает - PullRequest
1 голос
/ 28 января 2012

В момент моей проблемы у меня есть следующий XML в XElement. В полном XML может быть много таких «Идентификаторов», и моя навигация работает до этого момента.

    <Identifiers>
      <identifier>
        <Type>MR</Type>
        <Value>123321</Value>
        <Authority></Authority>
      </identifier>
      <identifier>
        <Type>AN</Type>
        <Value>123321-01</Value>
        <Authority></Authority>
      </identifier>
      <identifier>
        <Type>PN</Type>
        <Value>123321</Value>
        <Authority></Authority>
      </identifier>
    </Identifiers>

Вот Linq-To-XML:

    id = xd.Root.Element("Patient");
    id = id.Element("Identifiers"); //At this point "id" contains the above XML.
    id = id.Elements("Identifier").FirstOrDefault(x => x.Element("Type").Value == "AN");

Последнее утверждение, где оно разваливается и возвращает ноль.

Что мне здесь не хватает?

Ответы [ 2 ]

6 голосов
/ 28 января 2012

Поскольку XML чувствителен к регистру, попробуйте заменить «Идентификатор» в вашем последнем выражении на «идентификатор».

1 голос
/ 28 января 2012

Предполагая, что xd является вашим XDocument, попробуйте следующее:

xd.Descendents("identifier").FirstOrDefault(x => x.Element("Type").Value == "AN");

Фактически, если вы ожидаете только одно значение "AN" для типа в вашем документе, то вы можете сделать это:

 xd.Descendents("Type").FirstOrDefault(x => x.Value.Equals("AN"));

Или, если у вас, возможно, много «Type» со значением «AN»:

xd.Descendents("Type").Where(x => x.Value.Equals("AN"));
...