Доступ к значению дочернего узла с родительской ссылкой с LINQ to XML - PullRequest
0 голосов
/ 19 мая 2011

Я застрял с доступом к значению дочернего узла.Ниже приведена структура XML и код для создания нового контакта.

<Order xmlns="http://example.com">
    <MiscContact>
        <MiscContact>
            <ContactType>MailingContact</ContactType>
            <Contact>
                <Name>
                    <First>JIM</First>                      
                    <Last>RON</Last>
                    <FullName>RON JIM</FullName>
                </Name>
                <IsValid>false</IsValid>
              </Contact>
        </MiscContact>
    </MiscContact> 
    <ExportForm>
        <Contact>
            <Name>
                <First>JIM</First>                      
                <Last>RON</Last>
                <FullName>RON JIM</FullName>                   
            </Name>                
        <IsValid>false</IsValid>
        </Contact>
    </ExportForm>
</Order>

Код для создания нового контакта только для <MiscContact>:

XNamespace Namespace = "http://online.us.com";
var MiscContact = from mc in xmlDoc.Descendants(Namespace + "Contact") 
                  where mc.Parent.Name.Equals("MiscContact")
                  select new Contact
                  { Name = ob.Element(Namespace + "Name").Value }

Проблема, с которой я столкнулся, заключается в том, что, хотя яв предложении where можно выбрать только контакт, родитель которого является MiscContact, но загружаются разделы контактов как из <MiscContact>, так и <ExportForm>.

Есть идеи, как решить эту проблему?

1 Ответ

1 голос
/ 19 мая 2011

Ваш код работает правильно с предложением where и извлекает элемент Name из MiscContact -> Contact -> Name.Я думаю, что ваша проблема в том, что вы используете .Value в конце, который объединяет все эти значения вместе:

<Name>
  <First>JIM</First>                      
  <Last>RON</Last>
  <FullName>RON JIM</FullName>
</Name>

В результате получается «JIMRONRON JIM».Если вам нужен "FullName", то вы должны использовать:

mc.Element(Namespace + "Name")
  .Element(Namespace + "FullName").Value

Заменить "FullName" на "First" или "Last" при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...