запрос linq для получения значения из XML в свойствах класса c # - Linq To XML - PullRequest
0 голосов
/ 17 сентября 2010
<Response SessionId="55C10AC0E63B44FCB1868FF4B49E6DF7" xmlns="http://MySample.Sample.com/Sample.xsd">
  <Status Success="true" Message="OK" ErrorCode="0" /> 
  <Data>
  <List Name="My.API.Customer.Customers" Type="My.API.Customer.Customers">
    <Item Key="12345678-0" State="Unchanged">
    <Value Name="MasterCustomerId" Value="12345678" /> 
     <Value Name="SubCustomerId" Value="0" /> 
    <Value Name="IsAbstractAuthor" Value="False" /> 
    <Value Name="LastFirstName" Value="Cal, Duke" /> 
    <Value Name="IsAbstractReviewer" Value="False" /> 
    <Value Name="NamePrefix" Value="" /> 
    <Value Name="FirstName" Value="Cal" /> 
    <Value Name="MiddleName" Value="" /> 
    <Value Name="LastName" Value="Duke" /> 
    <Value Name="NameSuffix" Value="" /> 
    <Value Name="NameCredentials" Value="" /> 
    <Value Name="SearchName" Value="DUKE;CAL" /> 
    <Value Name="LabelName" Value="Cal Duke" /> 
    <Value Name="FormalSalutation" Value="Mr. Duke" /> 
    <Value Name="IsCustomerStatusActive" Value="True" /> 
    <Value Name="OrganizationId" Value="" /> 
    <Value Name="OrganizationUnitId" Value="" /> 
    <Value Name="RecordType" Value="I" /> 
    <Value Name="CanPlaceOrderFlag" Value="True" /> 
    <Value Name="CanCreateSegmentsFlag" Value="False" /> 
    <Value Name="BillPrimaryAccountFlag" Value="True" /> 
    <Value Name="Nickname" Value="" /> 
    <Value Name="InformalSalutation" Value="Cal" /> 
    <Value Name="CustomerClassCode" Value="INDIV" /> 
    <Value Name="CustomerStatusCode" Value="ACTIVE" /> 
    <Value Name="CustomerStatusDate" Value="8/9/2010 4:17:23 PM" /> 
    <Value Name="AllowFaxFlag" Value="True" /> 
    <Value Name="AllowEmailFlag" Value="True" /> 
    <Value Name="AllowPhoneFlag" Value="True" /> 
    <Value Name="AllowLabelSalesFlag" Value="True" /> 
    <Value Name="AllowSolicitationFlag" Value="True" /> 
    <Value Name="AllowInternalMailFlag" Value="True" /> 
    <Value Name="SolicitationRemovalDate" Value="12:00:00 AM" /> 
    <Value Name="TaxableFlag" Value="True" /> 
    <Value Name="FederalTaxId" Value="" /> 
    <Value Name="VATId" Value="" /> 
    <Value Name="TaxExemptId" Value="" /> 
    <Value Name="Ssn" Value="" /> 
    <Value Name="GenderCode" Value="M" /> 
    <Value Name="BirthDate" Value="12:00:00 AM" /> 
    <Value Name="EthnicityCode" Value="99" /> 
    <Value Name="AnnualIncomeRangeCode" Value="" /> 
   </Item>
 </List>
    </Data>
</Response>

Если у меня есть класс C # под названием SampleUser со свойствами для FirstName, LastName и т. Д., Как я могу использовать linq-to-Xml и получить значения из XML, которые будут назначены соответствующим свойствам класса C #.

Ответы [ 3 ]

1 голос
/ 17 сентября 2010
XDocument doc = XDocument.Parse(xmlstring);
var a = from b in doc.Descendants("Value")
        select new SampleUser(){FirstName = b.Attribute("firstName").Value,
                                lastName = b.Attribute("lastName").value};
0 голосов
/ 18 сентября 2010

Потомки Item, имеющие одинаковые идентификаторы, делают это трудным для Linq-to-XML (с точки зрения раздувания кода), но не являются невозможными.this

XDocument document = XDocument.Parse(xml);
XNamespace ns = "http://MySample.Sample.com/Sample.xsd";

var sampleUsers = from item in document.Root.Element(ns + "Data").Element(ns + "List").Elements(ns + "Item")
                  select new SampleUser
                  {
                      FirstName = item.Elements(ns + "Value").First(v => v.Attribute("Name").Value.Equals("FirstName")).Attribute("Value").Value,
                      LastName = item.Elements(ns + "Value").First(v => v.Attribute("Name").Value.Equals("LastName")).Attribute("Value").Value
                  };

Было бы намного лучше, если бы XML был похож на

<Item>
  <FirstName>Bob</FirstName>
  <LastName>Smith</LastName>
</Item>

Возможно, вы сможете исследовать преобразование, чтобы действительно попасть туда.

0 голосов
/ 17 сентября 2010

LINQ to XML - не лучший инструмент для этой цели.

Если у вас есть схема XSD для ответа, вы можете использовать инструмент XSD.exe , который поставляется с VisualСтудия для создания класса для вас.Он также сгенерирует фабричный метод Deserialize, который позволит вам создать экземпляр класса из данных XML.

Если у вас нет XSD, вы можете использовать инструмент, который выведет схемуиз образца.Вот пример такого приложения.

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